From 0d8df9ff68f41c487fb87c154435560d155536d5 Mon Sep 17 00:00:00 2001 From: Suneet Srivastava Date: Fri, 22 Nov 2019 11:24:20 +0530 Subject: [PATCH 01/32] feat: Redesign about screen (#2929) --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 3 +- .../gallery/activities/AboutActivity.java | 415 +++----------- .../res/drawable-xxhdpi/ic_launcher_web.png | Bin 0 -> 46645 bytes app/src/main/res/drawable/ic_release.png | Bin 0 -> 418 bytes .../res/drawable/ic_special_thanks_gift.png | Bin 0 -> 340 bytes app/src/main/res/layout/activity_about.xml | 508 +----------------- app/src/main/res/layout/activity_drawer.xml | 2 +- app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 61 +-- 10 files changed, 99 insertions(+), 895 deletions(-) create mode 100644 app/src/main/res/drawable-xxhdpi/ic_launcher_web.png create mode 100755 app/src/main/res/drawable/ic_release.png create mode 100755 app/src/main/res/drawable/ic_special_thanks_gift.png diff --git a/app/build.gradle b/app/build.gradle index 2d9410ddd..8d3cca4d6 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -170,7 +170,6 @@ dependencies { implementation "com.github.bumptech.glide:glide:$rootProject.glideVersion" implementation "com.github.bumptech.glide:gifencoder-integration:$rootProject.glideVersion" implementation 'com.yalantis:ucrop:1.5.0' - implementation 'de.psdev.licensesdialog:licensesdialog:1.8.0' /*implementation('com.crashlytics.sdk.android:crashlytics:2.9.3@aar') { transitive = true; }*/ @@ -236,6 +235,9 @@ dependencies { //compressor implementation 'id.zelory:compressor:2.1.0' + //about page + implementation 'com.github.medyo:android-about-page:1.2.5' + } apply plugin: 'com.android.application' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cb6946394..aa7352eae 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -273,8 +273,7 @@ + android:label="@string/about"> onBackPressed()); - toolbar.setTitle(getString(R.string.about)); - - /*Status Bar */ - setStatusBarColor(); - - /* Nav Bar */ - setNavBarColor(); - - /* Recent App */ - setRecentApp(getString(R.string.about)); - - /* Title Cards */ - int color = getAccentColor(); - ((TextView) findViewById(R.id.tv_about_fossasia)).setTextColor(color); - ((TextView) findViewById(R.id.tv_special_thanks)).setTextColor(color); - ((TextView) findViewById(R.id.tv_support_label)).setTextColor(color); - ((TextView) findViewById(R.id.tv_license_heading)).setTextColor(color); - ((TextView) findViewById(R.id.tv_connect_to_us)).setTextColor(color); - - /* ScrolView */ - setScrollViewColor(scr); - - setThemeOnChangeListener(); - setUpActions(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_about, menu); - return super.onCreateOptionsMenu(menu); + getSupportActionBar().setTitle(R.string.about); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + simulateDayNight(/* DAY */ 0); + + View aboutPage = + new AboutPage(this) + .isRTL(false) + .setImage(R.drawable.ic_launcher_web) + .setDescription(getString(R.string.app_light_description)) + .addItem(new Element(BuildConfig.VERSION_NAME + "", R.drawable.ic_release)) + .addGroup(getString(R.string.about_special_thanks)) + .addItem(getOpenCameraElement()) + .addItem(getLeafPicElement()) + .addGroup(getString(R.string.connect_to_us)) + .addEmail("phimpme@googlegroups.com") + .addWebsite(getString(R.string.phimpme_website)) + .addGitHub(getString(R.string.github_phimpme)) + .addFacebook(getString(R.string.facebook_phimpme)) + .addTwitter(getString(R.string.twitter_phimpme)) + .create(); + + llAbout.addView(aboutPage); } @Override - public boolean onPrepareOptionsMenu(Menu menu) { - return super.onPrepareOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - + public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { - case R.id.up_settings: - startActivity(new Intent(AboutActivity.this, SettingsActivity.class)); - return true; - - default: - return super.onOptionsItemSelected(item); + case android.R.id.home: + finish(); } + return super.onOptionsItemSelected(item); } - @Override - public void onClick(View v) { - switch (v.getId()) { - case R.id.tv_about_fossasia: - cts.launchUrl(getApplicationContext().getString(R.string.contributors_link)); - break; - - case R.id.iv_github: - case R.id.tv_github_desc: - case R.id.tv_github_label: - cts.launchUrl(getApplicationContext().getString(R.string.phimpme_github)); - break; - - case R.id.tv_report_bug_desc: - case R.id.tv_report_bug_label: - case R.id.iv_bug: - cts.launchUrl(getApplicationContext().getString(R.string.phimpme_github_issues)); - break; - - case R.id.tv_open_camera: - cts.launchUrl(getApplicationContext().getString(R.string.opencamera_sourceforge)); - break; - - case R.id.tv_leaf_pic: - cts.launchUrl(getApplicationContext().getString(R.string.leafpic_github)); - break; - - case R.id.iv_license: - case R.id.tv_license_desc: - case R.id.tv_license_label: - cts.launchUrl(getApplicationContext().getString(R.string.phimpme_license)); - break; - - case R.id.iv_library: - case R.id.tv_library_license_desc: - case R.id.tv_library_license_label: - licenseDialog(); - break; - - case R.id.iv_website: - case R.id.tv_phimpme_website: - case R.id.tv_phimpme_website_desc: - cts.launchUrl(getApplicationContext().getString(R.string.phimpme_website)); - break; - - case R.id.iv_facebook: - case R.id.tv_facebook: - case R.id.tv_facebook_desc: - try { - Intent facebookIntent = new Intent(Intent.ACTION_VIEW); - String facebookUrl = getFacebookPageURL(getApplicationContext()); - facebookIntent.setData(Uri.parse(facebookUrl)); - startActivity(facebookIntent); - } catch (ActivityNotFoundException e) { - cts.launchUrl("https://www.facebook.com/phimpmeapp"); - } - break; - case R.id.iv_twitter: - case R.id.tv_twitter: - case R.id.tv_twitter_desc: - try { - Intent intent = - new Intent(Intent.ACTION_VIEW, Uri.parse("twitter://user?screen_name=phimpme")); - startActivity(intent); - } catch (Exception e) { - startActivity( - new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/#!/phimpme"))); - } - break; - } + private Element getOpenCameraElement() { + return new Element() + .setTitle(getString(R.string.about_special_thanks_open_camera)) + .setIconDrawable(R.drawable.ic_special_thanks_gift) + .setOnClickListener(v -> customTabService.launchUrl("http://opencamera.sourceforge.net/")); } - private void setUpActions() { - - // Fossasia contributors - findViewById(R.id.tv_about_fossasia).setOnClickListener(this); - - // GitHub - findViewById(R.id.iv_github).setOnClickListener(this); - findViewById(R.id.tv_github_desc).setOnClickListener(this); - findViewById(R.id.tv_github_label).setOnClickListener(this); - - /// Report bug - findViewById(R.id.tv_report_bug_desc).setOnClickListener(this); - findViewById(R.id.iv_bug).setOnClickListener(this); - findViewById(R.id.tv_report_bug_label).setOnClickListener(this); - - // openCamera - findViewById(R.id.tv_open_camera).setOnClickListener(this); - - // LeafPic - findViewById(R.id.tv_leaf_pic).setOnClickListener(this); - - // License - findViewById(R.id.iv_license).setOnClickListener(this); - findViewById(R.id.tv_license_desc).setOnClickListener(this); - findViewById(R.id.tv_license_label).setOnClickListener(this); - - // Libs - findViewById(R.id.iv_library).setOnClickListener(this); - findViewById(R.id.tv_library_license_label).setOnClickListener(this); - findViewById(R.id.tv_library_license_desc).setOnClickListener(this); - - // Website - findViewById(R.id.iv_website).setOnClickListener(this); - findViewById(R.id.tv_phimpme_website).setOnClickListener(this); - findViewById(R.id.tv_phimpme_website_desc).setOnClickListener(this); - - // Facebook page - findViewById(R.id.iv_facebook).setOnClickListener(this); - findViewById(R.id.tv_facebook).setOnClickListener(this); - findViewById(R.id.tv_facebook_desc).setOnClickListener(this); - - // Twitter page - findViewById(R.id.iv_twitter).setOnClickListener(this); - findViewById(R.id.tv_twitter_desc).setOnClickListener(this); - findViewById(R.id.tv_twitter).setOnClickListener(this); + private Element getLeafPicElement() { + return new Element() + .setTitle(getString(R.string.about_special_thanks_leafpic)) + .setIconDrawable(R.drawable.ic_special_thanks_gift) + .setOnClickListener(v -> customTabService.launchUrl("https://github.com/HoraApps/LeafPic")); } - public String getFacebookPageURL(Context context) { - - PackageManager packageManager = context.getPackageManager(); - try { - int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode; - if (versionCode >= 3002850) { // newer versions of fb app - return "fb://facewebmodal/f?href=" + "https://www.facebook.com/phimpmeapp"; - } else { // older versions of fb app - return "fb://page/" + "phimpmeapp"; - } - } catch (PackageManager.NameNotFoundException e) { - return "https://www.facebook.com/phimpmeapp"; // normal web url + void simulateDayNight(int currentSetting) { + final int DAY = 0; + final int NIGHT = 1; + final int FOLLOW_SYSTEM = 3; + + int currentNightMode = + getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + if (currentSetting == DAY && currentNightMode != Configuration.UI_MODE_NIGHT_NO) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + } else if (currentSetting == NIGHT && currentNightMode != Configuration.UI_MODE_NIGHT_YES) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } else if (currentSetting == FOLLOW_SYSTEM) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); } } - - private void setThemeOnChangeListener() { - - /* Background */ - findViewById(R.id.clAboutParent).setBackgroundColor(getBackgroundColor()); - - /* Cards */ - int color = getCardBackgroundColor(); - ((CardView) findViewById(R.id.card_about_app)).setCardBackgroundColor(color); - ((CardView) findViewById(R.id.card_special_thanks)).setCardBackgroundColor(color); - ((CardView) findViewById(R.id.card_support_dev)).setCardBackgroundColor(color); - ((CardView) findViewById(R.id.card_license)).setCardBackgroundColor(color); - ((CardView) findViewById(R.id.card_connect_to_us)).setCardBackgroundColor(color); - - // cvSpecialThanks.setBackgroundColor(color); - - /* Icons */ - // ABOUT APP - color = getIconColor(); - ((IconicsImageView) findViewById(R.id.iv_library)).setColor(color); - ((IconicsImageView) findViewById(R.id.iv_license)).setColor(color); - - // ABOUT SUPPORT - ((IconicsImageView) findViewById(R.id.iv_github)).setColor(color); - ((IconicsImageView) findViewById(R.id.iv_bug)).setColor(color); - - // CONNECT ICONS - ((IconicsImageView) findViewById(R.id.iv_website)).setColor(color); - ((IconicsImageView) findViewById(R.id.iv_facebook)).setColor(color); - ((IconicsImageView) findViewById(R.id.iv_twitter)).setColor(color); - - /** TextViews * */ - color = getTextColor(); - ((TextView) findViewById(R.id.tv_library_license_desc)).setTextColor(color); - ((TextView) findViewById(R.id.tv_app_description)).setTextColor(color); - ((TextView) findViewById(R.id.tv_github_label)).setTextColor(color); - ((TextView) findViewById(R.id.tv_license_label)).setTextColor(color); - ((TextView) findViewById(R.id.tv_report_bug_label)).setTextColor(color); - ((TextView) findViewById(R.id.tv_phimpme_website)).setTextColor(color); - ((TextView) findViewById(R.id.tv_facebook)).setTextColor(color); - ((TextView) findViewById(R.id.tv_twitter)).setTextColor(color); - - /** Sub Text Views* */ - color = getSubTextColor(); - ((TextView) findViewById(R.id.tv_version)).setTextColor(color); - ((TextView) findViewById(R.id.tv_version)) - .setText(getString(R.string.version_title) + " " + BuildConfig.VERSION_NAME); - ((TextView) findViewById(R.id.tv_license_desc)).setTextColor(color); - ((TextView) findViewById(R.id.tv_open_camera)).setTextColor(color); - ((TextView) findViewById(R.id.tv_leaf_pic)).setTextColor(color); - ((TextView) findViewById(R.id.tv_github_desc)).setTextColor(color); - ((TextView) findViewById(R.id.tv_library_license_desc)).setTextColor(color); - ((TextView) findViewById(R.id.tv_report_bug_desc)).setTextColor(color); - ((TextView) findViewById(R.id.tv_phimpme_website_desc)).setTextColor(color); - ((TextView) findViewById(R.id.tv_facebook_desc)).setTextColor(color); - ((TextView) findViewById(R.id.tv_twitter_desc)).setTextColor(color); - } - - private void licenseDialog() { - // TODO: 10/07/16 ~Jibe rifai sta roba please! - final Notices notices = new Notices(); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.glide), - getApplicationContext().getString(R.string.glide_github), - getApplicationContext().getString(R.string.copyright_2014_google), - new ApacheSoftwareLicense20())); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.ion), - getApplicationContext().getString(R.string.ion_github), - getApplicationContext().getString(R.string.copyright_2013_koushik_dutta), - new ApacheSoftwareLicense20())); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.android_iconics), - getApplicationContext().getString(R.string.android_iconics_github), - getApplicationContext().getString(R.string.copyright_2016_mike_penz), - new ApacheSoftwareLicense20())); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.appintro), - getApplicationContext().getString(R.string.appintro_github), - getApplicationContext().getString(R.string.copyright_2015_paolo_rotolo) - + getApplicationContext().getString(R.string.copyright_2016_maximilian_narr), - new ApacheSoftwareLicense20())); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.ucrop), - getApplicationContext().getString(R.string.ucrop_github), - getApplicationContext().getString(R.string.copyright_2016_yolantis), - new ApacheSoftwareLicense20())); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.shiftcolorpicker), - getApplicationContext().getString(R.string.shiftcolorpicker), - getApplicationContext().getString(R.string.copyright_2015_bogdasarov_bogdan), - new MITLicense())); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.photoview), - getApplicationContext().getString(R.string.photoview_github), - getApplicationContext().getString(R.string.copyright_2011_2012_chris_banes), - new ApacheSoftwareLicense20())); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.circleimageview), - getApplicationContext().getString(R.string.circleimageview_github), - getApplicationContext().getString(R.string.copyright_2014_2015_henning_dodenhof), - new ApacheSoftwareLicense20())); - notices.addNotice( - new Notice( - getApplicationContext().getString(R.string.horizontalwheelview), - getApplicationContext().getString(R.string.horizontalwheelview_github), - getApplicationContext().getString(R.string.copyright_2016_mykhailo_schurov), - new ApacheSoftwareLicense20())); - - new LicensesDialog.Builder(this) - .setNotices(notices) - .setIncludeOwnLicense(true) - .setThemeResourceId(getDialogStyle()) - .build() - .show(); - } } diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher_web.png b/app/src/main/res/drawable-xxhdpi/ic_launcher_web.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c44d1603633a53def7c6bcdf039d99ce494d04 GIT binary patch literal 46645 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
6J>_+I$y1TGp|st-a)JkH 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 I5hC<|05IiPdjJ3c literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_release.png b/app/src/main/res/drawable/ic_release.png new file mode 100755 index 0000000000000000000000000000000000000000..32ab4aedfa699fff92beedcf5080cd21a78060e0 GIT binary patch literal 418 zcmV;T0bTxyP)ZKr8w^lJm|Ad%1P5xtG7>DR1+z#n ztriSnk^lWH)2|k^iU^w2f_f1_wOWuPBFIn+ibVv4s`w-xMFh7boBxWhK|}yoCSNmt zoPd}B4)N2E*Rlno0@y&S6U>3Q0LFBJ36}^a^l#CIxL^yd;X^(|l4JZdh7iUTQd|?N zF@HLb^{+yLLX8TtMILgdT2LnE#e-20snDhh4FQCZvX%Q M07*qoM6N<$f{6sOS^xk5 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_special_thanks_gift.png b/app/src/main/res/drawable/ic_special_thanks_gift.png new file mode 100755 index 0000000000000000000000000000000000000000..4d0af086f82781100e523de9cedd18aefa1a5062 GIT binary patch literal 340 zcmV-a0jvIrP)Ds+R0eTG00cl$pxfAWbO|Xmgh0^^1Ry{Vpa?NV02(0KU`EPV>TPD&hi%`P zB-Zl)e>~3XeCCacGY#+V)GUK#HFw@LoT$iT(StD5jf#rvk>$anEcQg=dEZFflf}Id z4zMqVrpvu7xS9Lg5;io& m47O~NvSzpRX}i{B^UpUtW$NWdfaCN40000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_drawer.xml b/app/src/main/res/layout/activity_drawer.xml index ef4224941..281fafa62 100644 --- a/app/src/main/res/layout/activity_drawer.xml +++ b/app/src/main/res/layout/activity_drawer.xml @@ -309,7 +309,7 @@ android:layout_height="wrap_content" android:paddingBottom="@dimen/medium_spacing" android:paddingTop="@dimen/medium_spacing" - android:text="@string/about_support_rate" + android:text="@string/rate_us" android:textColor="@color/md_dark_background" android:textSize="@dimen/medium_text"/> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 9c1879634..7c51e903d 100755 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -88,6 +88,7 @@ 200dp 1dp 5dp + 4dp 10dp 16dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 553648d0e..83afd8683 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -813,53 +813,13 @@ Version Connect to us - License - Check GNU GENERAL PUBLIC License terms used on Phimp.me. - - Library Licenses - Check third-party libs used on Phimp.me. - - Authors - - I\'m 19 years old. I\'m a young software developer, I like CS in general, at most I love - learn doing stuff with Linux and Android. I also like TV Series. - - - I\'m 20 years old. I love music, video games and drawing. - I\'m also really into computer science, programming and design. - - Google+ - send via… - SEND EMAIL - - There are no email clients installed. Special thanks - to OpenCamera for the + Special thanks to OpenCamera for the awesome camera. - to LeafPic for the + Special thanks to LeafPic for the gallery. - - - - - Facebook - Connect to us on Facebook. - Twitter - Follow us on Twitter. - Phimp.me - Visit our website here. - - - Report bug - Report bug or request new features. - - Rate Us - Leave us a positive rating if you like Phimp.me. - - GitHub - Fork the repo and push changes or submit new issues. Path @@ -912,6 +872,7 @@ Tags Timeline Wallpapers + Rate Us Donate GitHub @@ -968,10 +929,7 @@ (TESTING) It allows you to have a better zoom management and a clear image but it isn\'t really optimized right now. - Support Development - Developed by FOSSASIA - contributors. - + AccountsActivity @@ -1318,6 +1276,7 @@ http://github.com/chrisbanes/PhotoView https://github.com/hdodenhof/CircleImageView https://github.com/shchurov/HorizontalWheelView + fossasia?utf8=✓&q=phimpme Version: Error: @@ -1431,12 +1390,6 @@ text/plain market://details?id= https://play.google.com/store/apps/details?id= - twitter://user?screen_name=phimpme - https://twitter.com/#!/phimpme - com.facebook.katana - fb://facewebmodal/f?href= - https://www.facebook.com/phimpmeapp - fb://page/ - phimpmeapp - https://www.facebook.com/phimpmeapp + phimpme + phimpmeapp From 8cd3a55f4bc0b55a704a483c2b001e5ffcdb44ed Mon Sep 17 00:00:00 2001 From: Suneet Srivastava Date: Sun, 24 Nov 2019 18:03:44 +0530 Subject: [PATCH 02/32] fix: removed materialshowcase libary due to crash on android 10 (#2934) --- app/build.gradle | 2 +- .../fossasia/phimpme/base/BaseActivity.java | 94 +++++++++---------- .../phimpme/opencamera/Preview/Preview.java | 32 +++---- app/src/main/res/values/strings.xml | 3 +- 4 files changed, 59 insertions(+), 72 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8d3cca4d6..dd260a6e0 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -164,7 +164,7 @@ dependencies { implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.lifecycleVersion" //utils - implementation 'com.github.deano2390:MaterialShowcaseView:1.2.0@aar' + implementation 'com.getkeepsafe.taptargetview:taptargetview:1.13.0' implementation "com.jakewharton:butterknife:$rootProject.butterknifeVersion" annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterknifeVersion" implementation "com.github.bumptech.glide:glide:$rootProject.glideVersion" diff --git a/app/src/main/java/org/fossasia/phimpme/base/BaseActivity.java b/app/src/main/java/org/fossasia/phimpme/base/BaseActivity.java index ce38bec74..14768b048 100644 --- a/app/src/main/java/org/fossasia/phimpme/base/BaseActivity.java +++ b/app/src/main/java/org/fossasia/phimpme/base/BaseActivity.java @@ -1,9 +1,9 @@ package org.fossasia.phimpme.base; +import android.Manifest; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Intent; -import android.content.pm.PackageManager; import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Bundle; @@ -13,16 +13,16 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; +import com.getkeepsafe.taptargetview.TapTarget; +import com.getkeepsafe.taptargetview.TapTargetSequence; import com.google.android.material.bottomnavigation.BottomNavigationItemView; import com.google.android.material.bottomnavigation.BottomNavigationView; import org.fossasia.phimpme.R; import org.fossasia.phimpme.accounts.AccountActivity; import org.fossasia.phimpme.gallery.activities.LFMainActivity; +import org.fossasia.phimpme.gallery.util.PermissionUtils; import org.fossasia.phimpme.gallery.util.PreferenceUtil; import org.fossasia.phimpme.opencamera.Camera.CameraActivity; -import uk.co.deanwild.materialshowcaseview.MaterialShowcaseSequence; -import uk.co.deanwild.materialshowcaseview.MaterialShowcaseView; -import uk.co.deanwild.materialshowcaseview.ShowcaseConfig; public abstract class BaseActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener { @@ -62,12 +62,11 @@ protected void onCreate(Bundle savedInstanceState) { nav_cam = findViewById(R.id.navigation_camera); nav_acc = findViewById(R.id.navigation_accounts); - int checkStoragePermission = - ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE); - if (checkStoragePermission == PackageManager.PERMISSION_GRANTED) - presentShowcaseSequence(); // one second delay - SP = PreferenceUtil.getInstance(getApplicationContext()); + + if (PermissionUtils.checkPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) + && SP.getBoolean(getResources().getString(R.string.first_time_showcase), true)) + presentShowcaseSequence(); } @Override @@ -76,54 +75,47 @@ protected void onResume() { isSWNavBarChecked = SP.getBoolean(getString(R.string.preference_colored_nav_bar), true); } - private void presentShowcaseSequence() { - - ShowcaseConfig config = new ShowcaseConfig(); - config.setDelay(500); // half second between each showcase view - - MaterialShowcaseSequence sequence = new MaterialShowcaseSequence(this, SHOWCASE_ID); - - sequence.setOnItemShownListener( - new MaterialShowcaseSequence.OnSequenceItemShownListener() { - @Override - public void onShow(MaterialShowcaseView itemView, int position) { - // Toast.makeText(itemView.getContext(), "Item #" + position, - // Toast.LENGTH_SHORT).show(); - } - }); - - sequence.setConfig(config); - - sequence.addSequenceItem( - nav_home, - getResources().getString(R.string.home_button), - getResources().getString(R.string.ok_button)); - - sequence.addSequenceItem( - new MaterialShowcaseView.Builder(this) - .setTarget(nav_cam) - .setDismissText(getResources().getString(R.string.ok_button)) - .setContentText(getResources().getString(R.string.camera_button)) - .setDismissOnTouch(true) - .build()); - - sequence.addSequenceItem( - new MaterialShowcaseView.Builder(this) - .setTarget(nav_acc) - .setDismissText(getResources().getString(R.string.ok_button)) - .setContentText(getResources().getString(R.string.accounts_button)) - .setDismissOnTouch(true) - .build()); - - sequence.start(); - } - @Override protected void onStart() { super.onStart(); updateNavigationBarState(); } + private void presentShowcaseSequence() { + new TapTargetSequence(this) + .targets( + TapTarget.forView(nav_home, getResources().getString(R.string.home_button)) + .cancelable(true) + .outerCircleAlpha(0.7f) + .textColor(R.color.white) + .transparentTarget(true), + TapTarget.forView(nav_cam, getResources().getString(R.string.camera_button)) + .cancelable(true) + .outerCircleAlpha(0.7f) + .textColor(R.color.white) + .transparentTarget(true), + TapTarget.forView(nav_acc, getResources().getString(R.string.accounts_button)) + .outerCircleAlpha(0.7f) + .textColor(R.color.white) + .transparentTarget(true)) + .listener( + new TapTargetSequence.Listener() { + @Override + public void onSequenceFinish() { + SP.putBoolean(getResources().getString(R.string.first_time_showcase), false); + } + + @Override + public void onSequenceStep(TapTarget lastTarget, boolean targetClicked) {} + + @Override + public void onSequenceCanceled(TapTarget lastTarget) { + SP.putBoolean(getResources().getString(R.string.first_time_showcase), false); + } + }) + .start(); + } + // Remove inter-activity transition to avoid screen tossing on tapping bottom navigation items @Override public void onPause() { diff --git a/app/src/main/java/org/fossasia/phimpme/opencamera/Preview/Preview.java b/app/src/main/java/org/fossasia/phimpme/opencamera/Preview/Preview.java index e174b7c0c..a8cd980d5 100644 --- a/app/src/main/java/org/fossasia/phimpme/opencamera/Preview/Preview.java +++ b/app/src/main/java/org/fossasia/phimpme/opencamera/Preview/Preview.java @@ -44,6 +44,8 @@ import android.view.WindowManager; import android.widget.Toast; import androidx.core.content.ContextCompat; +import com.getkeepsafe.taptargetview.TapTarget; +import com.getkeepsafe.taptargetview.TapTargetView; import com.google.android.material.snackbar.Snackbar; import java.text.DecimalFormat; import java.util.ArrayList; @@ -69,7 +71,6 @@ import org.fossasia.phimpme.opencamera.Preview.CameraSurface.MyTextureView; import org.fossasia.phimpme.opencamera.UI.PopupView; import org.fossasia.phimpme.utilities.SnackBarHandler; -import uk.co.deanwild.materialshowcaseview.MaterialShowcaseView; /** * This class was originally named due to encapsulating the camera preview, but in practice it's @@ -1422,20 +1423,18 @@ public void onFaceDetection(CameraController.Face[] faces) { @Override public void onClick(View v) { SharedPreferences sharedPreferences = getDefaultSharedPreferences(activity); - Boolean firstClick = - sharedPreferences.getBoolean(activity.getString(R.string.first_click), true); - if (firstClick) { - MaterialShowcaseView.resetSingleUse(activity, SHOWCASE_ID); - new MaterialShowcaseView.Builder(activity) - .setTarget(toggle) - .setTitleText(R.string.toggle_button) - .setDismissText(R.string.ok_button) - .setContentText( - R.string.toggle_info) // optional but starting animations immediately in - // onCreate can make them choppy - .singleUse( - SHOWCASE_ID) // provide a unique ID used to ensure it is only shown once - .show(); + if (sharedPreferences.getBoolean(activity.getString(R.string.first_click), true)) { + TapTargetView.showFor( + activity, + TapTarget.forView(toggle, getResources().getString(R.string.toggle_info)) + .cancelable(true) + .outerCircleAlpha(0.7f) + .textColor(R.color.white) + .transparentTarget(true), + null); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putBoolean(activity.getString(R.string.first_click), false); + editor.apply(); } else { try { final List colorEffect = getSupportedColorEffects(); @@ -1459,9 +1458,6 @@ public void onClick(View v) { Log.e(TAG, "ColorEffect List Size Is Null "); } } - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(activity.getString(R.string.first_click), false); - editor.apply(); } }); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 83afd8683..90e5b062e 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1232,12 +1232,10 @@ Find all your photos in the device Add Multiple Accounts to share amazing photos Click Amazing Pictures - GOT IT Sorry! Your device doesn\'t support speech input. Paint Color Upload History Trash Bin - Toggle Button You haven\'t shared anything. No Items present currently Only images deleted in the Phimpme Android app are present here. @@ -1258,6 +1256,7 @@ TextView v1.0 PDF + first time showcase http://phimp.me/ From a1c75104a1b1feff6f3ec8bcdcfe3a97ff5c769f Mon Sep 17 00:00:00 2001 From: Suneet Srivastava Date: Fri, 6 Dec 2019 14:10:23 +0530 Subject: [PATCH 03/32] fix: albums view acc to gallery standard (#2932) --- .../gallery/activities/LFMainActivity.java | 4 +- .../gallery/adapters/AlbumsAdapter.java | 135 +++++-------- app/src/main/res/layout/card_album.xml | 179 ++++++++---------- app/src/main/res/values/dimens.xml | 1 + 4 files changed, 135 insertions(+), 184 deletions(-) diff --git a/app/src/main/java/org/fossasia/phimpme/gallery/activities/LFMainActivity.java b/app/src/main/java/org/fossasia/phimpme/gallery/activities/LFMainActivity.java index 31789fda3..1e397fb68 100644 --- a/app/src/main/java/org/fossasia/phimpme/gallery/activities/LFMainActivity.java +++ b/app/src/main/java/org/fossasia/phimpme/gallery/activities/LFMainActivity.java @@ -554,7 +554,7 @@ public void onClick(View v) { @Override public boolean onLongClick(View v) { - final Album album = (Album) v.findViewById(R.id.album_name).getTag(); + final Album album = (Album) v.findViewById(R.id.tv_album_name).getTag(); if (checkForReveal) { enterReveal(); @@ -587,7 +587,7 @@ public boolean onLongClick(View v) { @Override public void onClick(View v) { fromOnClick = true; - final Album album = (Album) v.findViewById(R.id.album_name).getTag(); + final Album album = (Album) v.findViewById(R.id.tv_album_name).getTag(); showAppBar(); // int index = Integer.parseInt(v.findViewById(R.id.album_name).getTag().toString()); if (editMode) { diff --git a/app/src/main/java/org/fossasia/phimpme/gallery/adapters/AlbumsAdapter.java b/app/src/main/java/org/fossasia/phimpme/gallery/adapters/AlbumsAdapter.java index fd4015f95..499cae368 100644 --- a/app/src/main/java/org/fossasia/phimpme/gallery/adapters/AlbumsAdapter.java +++ b/app/src/main/java/org/fossasia/phimpme/gallery/adapters/AlbumsAdapter.java @@ -6,9 +6,7 @@ import android.graphics.PorterDuff; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.os.Build; import android.os.Environment; -import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -35,8 +33,8 @@ import org.fossasia.phimpme.gallery.util.ColorPalette; import org.fossasia.phimpme.gallery.util.PreferenceUtil; import org.fossasia.phimpme.gallery.util.ThemeHelper; +import org.jetbrains.annotations.NotNull; -/** Created by dnld on 1/7/16. */ public class AlbumsAdapter extends RecyclerView.Adapter { private ArrayList albums; @@ -60,6 +58,7 @@ public void updateTheme() { placeholder = (BitmapDrawable) drawable; } + @NotNull @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_album, parent, false); @@ -69,37 +68,36 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { } @Override - public void onBindViewHolder(final AlbumsAdapter.ViewHolder holder, int position) { + public void onBindViewHolder(@NotNull final AlbumsAdapter.ViewHolder holder, int position) { Album a = SharedMediaActivity.getAlbums().dispAlbums.get(position); - Media f = a.getCoverAlbum(); + Media media = a.getCoverAlbum(); if (a.getPath().contains(Environment.getExternalStorageDirectory().getPath())) { - holder.storage.setVisibility(View.INVISIBLE); + holder.ivStorage.setVisibility(View.VISIBLE); } else { - holder.storage.setImageResource( + holder.ivStorage.setImageResource( theme.getBaseTheme() == ThemeHelper.LIGHT_THEME ? R.drawable.ic_sd_storage_black_24dp : R.drawable.ic_sd_storage_white_24dp); - holder.storage.setVisibility(View.VISIBLE); + holder.ivStorage.setVisibility(View.VISIBLE); } if (a.isPinned() && (theme.getBaseTheme() == ThemeHelper.LIGHT_THEME)) { - holder.pin.setVisibility(View.VISIBLE); - holder.pin.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.pin_black)); + holder.ivPin.setVisibility(View.VISIBLE); + holder.ivPin.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.pin_black)); } else if (a.isPinned() && (theme.getBaseTheme() == ThemeHelper.AMOLED_THEME || theme.getBaseTheme() == ThemeHelper.DARK_THEME)) { - holder.pin.setVisibility(View.VISIBLE); - holder.pin.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.pin_white)); - } else holder.pin.setVisibility(View.INVISIBLE); - String path = ""; - path = f.getPath(); - Glide.with(holder.picture.getContext()) + holder.ivPin.setVisibility(View.VISIBLE); + holder.ivPin.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.pin_white)); + } else holder.ivPin.setVisibility(View.GONE); + + Glide.with(holder.ivAlbumPreview.getContext()) .asBitmap() - .load(path) + .load(media.getPath()) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .priority(Priority.HIGH) - .signature(f.getSignature()) + .signature(media.getSignature()) .centerCrop() .error(R.drawable.ic_error) .placeholder(placeholder) @@ -115,7 +113,7 @@ public boolean onLoadFailed( PreferenceUtil SP = PreferenceUtil.getInstance(context); SP.putBoolean( holder - .picture + .ivAlbumPreview .getContext() .getString(R.string.preference_use_alternative_provider), true); @@ -132,65 +130,41 @@ public boolean onResourceReady( return false; } }) - .into(holder.picture); + .into(holder.ivAlbumPreview); - holder.name.setTag(a); + holder.tvAlbumName.setTag(a); String hexPrimaryColor = String.format("#%06X", (0xFFFFFF & theme.getPrimaryColor())); - String hexAccentColor = String.format("#%06X", (0xFFFFFF & theme.getAccentColor())); - - if (hexAccentColor.equals(hexPrimaryColor)) { - float[] hsv = new float[3]; - int color = theme.getAccentColor(); - Color.colorToHSV(color, hsv); - hsv[2] *= 0.72f; // value component - color = Color.HSVToColor(hsv); - hexAccentColor = String.format("#%06X", (0xFFFFFF & color)); - } String textColor = theme.getBaseTheme() != ThemeHelper.LIGHT_THEME ? "#FAFAFA" : "#2b2b2b"; if (a.isSelected()) { - holder.selectedIcon.setColor(Color.WHITE); - holder.selectedIcon.setIcon(CommunityMaterial.Icon.cmd_check); - holder.layout.setBackgroundColor(Color.parseColor(hexPrimaryColor)); - holder.picture.setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); - holder.selectedIcon.setVisibility(View.VISIBLE); + holder.ivSelectedIcon.setColor(Color.WHITE); + holder.ivSelectedIcon.setIcon(CommunityMaterial.Icon.cmd_check_circle); + holder.tvAlbumName.setBackgroundColor(Color.parseColor(hexPrimaryColor)); + holder.tvPhotosCount.setBackgroundColor(Color.parseColor(hexPrimaryColor)); + holder.ivPin.setBackgroundColor(Color.parseColor(hexPrimaryColor)); + holder.ivAlbumPreview.setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); + holder.ivSelectedIcon.setVisibility(View.VISIBLE); if (theme.getBaseTheme() == ThemeHelper.LIGHT_THEME) { textColor = "#FAFAFA"; - hexAccentColor = "#FAFAFA"; } } else { - holder.picture.clearColorFilter(); - holder.selectedIcon.setVisibility(View.GONE); - holder.layout.setBackgroundColor( + holder.ivAlbumPreview.clearColorFilter(); + holder.ivSelectedIcon.setVisibility(View.GONE); + holder.tvAlbumName.setBackgroundColor( + ColorPalette.getTransparentColor(theme.getBackgroundColor(), 200)); + holder.tvPhotosCount.setBackgroundColor( + ColorPalette.getTransparentColor(theme.getBackgroundColor(), 200)); + holder.ivPin.setBackgroundColor( ColorPalette.getTransparentColor(theme.getBackgroundColor(), 200)); } + holder.tvAlbumName.setTextColor(Color.parseColor(textColor)); + holder.tvPhotosCount.setTextColor(Color.parseColor(textColor)); - String albumNameHtml = "" + a.getName() + ""; - String albumPhotoCountHtml = - "" - + a.getCount() - + "" - + " " - + holder.nPhotos.getContext().getString(R.string.media) - + ""; - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - holder.name.setText(Html.fromHtml(albumNameHtml, Html.FROM_HTML_MODE_LEGACY)); - holder.nPhotos.setText(Html.fromHtml(albumPhotoCountHtml, Html.FROM_HTML_MODE_LEGACY)); - } else { - holder.name.setText(Html.fromHtml(albumNameHtml)); - holder.nPhotos.setText(Html.fromHtml(albumPhotoCountHtml)); - } - - // (a.getImagesCount() == 1 ? c.getString(R.string.singular_photo) : - // c.getString(R.string.plural_photos)) + holder.tvAlbumName.setText(a.getName()); + holder.tvPhotosCount.setText( + a.getCount() + " " + holder.tvPhotosCount.getContext().getString(R.string.media)); } public void setOnClickListener(View.OnClickListener lis) { @@ -212,32 +186,21 @@ public int getItemCount() { return SharedMediaActivity.getAlbums().dispAlbums.size(); } - public boolean filterCheck(String foldername, String[] securedFolders) { - if (securedFolders != null) { - for (String s : securedFolders) { - if (s.equals(foldername)) return true; - } - } - return false; - } - static class ViewHolder extends RecyclerView.ViewHolder { - private ImageView picture; - private View layout; - private IconicsImageView selectedIcon; - private TextView name, nPhotos; - private ImageView pin; - private ImageView storage; + private ImageView ivAlbumPreview; + private IconicsImageView ivSelectedIcon; + private TextView tvAlbumName, tvPhotosCount; + private ImageView ivPin; + private ImageView ivStorage; ViewHolder(View itemView) { super(itemView); - picture = itemView.findViewById(R.id.album_preview); - selectedIcon = itemView.findViewById(R.id.selected_icon); - layout = itemView.findViewById(R.id.linear_card_text); - name = itemView.findViewById(R.id.album_name); - nPhotos = itemView.findViewById(R.id.album_photos_count); - pin = itemView.findViewById(R.id.icon_pinned); - storage = itemView.findViewById(R.id.storage_icon); + ivAlbumPreview = itemView.findViewById(R.id.iv_album_preview); + ivSelectedIcon = itemView.findViewById(R.id.selected_icon); + tvAlbumName = itemView.findViewById(R.id.tv_album_name); + tvPhotosCount = itemView.findViewById(R.id.tv_album_photos_count); + ivPin = itemView.findViewById(R.id.iv_pin); + ivStorage = itemView.findViewById(R.id.iv_storage_icon); } } } diff --git a/app/src/main/res/layout/card_album.xml b/app/src/main/res/layout/card_album.xml index 75975a29c..b8c6300ac 100644 --- a/app/src/main/res/layout/card_album.xml +++ b/app/src/main/res/layout/card_album.xml @@ -1,114 +1,101 @@ - - + - - + - - - - - - - + android:maxLines="1" + tools:text="Album Name" + android:paddingStart="@dimen/size_8" + android:paddingEnd="@dimen/size_8" + android:paddingTop="@dimen/size_4" + android:paddingBottom="@dimen/size_4" + android:textColor="@color/white" + app:layout_constraintTop_toBottomOf="@id/iv_album_preview" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/iv_pin" + /> - + - - - + - + - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7c51e903d..58011673e 100755 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -161,6 +161,7 @@ 1dp 2dp 3dp + 4dp 5dp 7dp 8dp From d556051de6a4126a43c80d44c82c7f615d985c8f Mon Sep 17 00:00:00 2001 From: Suneet Srivastava Date: Sun, 22 Dec 2019 01:43:32 +0530 Subject: [PATCH 04/32] fix: removed stetho dependency from build.gradle (#2944) --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8b49850e0..d65324917 100755 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,6 @@ allprojects { mavenCentral() maven { url "https://repo1.maven.org/maven2" } maven { url "https://dl.bintray.com/dasar/maven" } - maven { url 'https://github.com/uPhyca/stetho-realm/raw/master/maven-repo' } maven { url 'https://maven.google.com/' name 'Google' From 69104ca4a276026677de8a5bd71b34f216186abe Mon Sep 17 00:00:00 2001 From: Suneet Srivastava Date: Sun, 22 Dec 2019 17:42:58 +0530 Subject: [PATCH 05/32] feat: replace color picker (#2909) --- app/build.gradle | 2 +- .../editor/fragment/AddTextFragment.java | 61 +--- .../editor/fragment/PaintFragment.java | 50 +--- .../gallery/activities/SettingsActivity.java | 268 +++--------------- .../main/res/layout/color_piker_accent.xml | 65 ----- .../main/res/layout/color_piker_primary.xml | 65 ----- .../res/layout/dialog_media_viewer_theme.xml | 33 +-- build.gradle | 2 - 8 files changed, 69 insertions(+), 477 deletions(-) delete mode 100644 app/src/main/res/layout/color_piker_accent.xml delete mode 100644 app/src/main/res/layout/color_piker_primary.xml diff --git a/app/build.gradle b/app/build.gradle index dd260a6e0..219595f86 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -188,7 +188,7 @@ dependencies { //ui implementation 'de.hdodenhof:circleimageview:2.0.0' - implementation 'uz.shift:colorpicker:0.5@aar' + implementation 'me.jfenn.ColorPickerDialog:base:0.2.1' implementation 'com.turingtechnologies.materialscrollbar:lib:10.0.3' implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.7' implementation 'com.github.shchurov:horizontalwheelview:0.9.5' diff --git a/app/src/main/java/org/fossasia/phimpme/editor/fragment/AddTextFragment.java b/app/src/main/java/org/fossasia/phimpme/editor/fragment/AddTextFragment.java index 792e1750d..357ee202d 100644 --- a/app/src/main/java/org/fossasia/phimpme/editor/fragment/AddTextFragment.java +++ b/app/src/main/java/org/fossasia/phimpme/editor/fragment/AddTextFragment.java @@ -1,9 +1,6 @@ package org.fossasia.phimpme.editor.fragment; -import static android.graphics.Color.WHITE; - import android.content.Context; -import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -20,11 +17,10 @@ import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.TextView; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.iconics.IconicsDrawable; +import me.jfenn.colorpickerdialog.dialogs.ColorPickerDialog; import org.fossasia.phimpme.MyApplication; import org.fossasia.phimpme.R; import org.fossasia.phimpme.editor.EditImageActivity; @@ -32,8 +28,6 @@ import org.fossasia.phimpme.editor.task.StickerTask; import org.fossasia.phimpme.editor.view.TextStickerView; import org.fossasia.phimpme.gallery.util.ColorPalette; -import uz.shift.colorpicker.LineColorPicker; -import uz.shift.colorpicker.OnColorChangedListener; public class AddTextFragment extends BaseEditFragment implements TextWatcher, FontPickerDialog.FontPickerDialogListener { @@ -155,49 +149,16 @@ public void onClick(View v) { } private void textColorDialog() { - final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity()); - final View dialogLayout = - getActivity().getLayoutInflater().inflate(R.layout.color_piker_accent, null); - final LineColorPicker colorPicker = dialogLayout.findViewById(R.id.color_picker_accent); - final TextView dialogTitle = dialogLayout.findViewById(R.id.cp_accent_title); - dialogTitle.setText(R.string.text_color_title); - colorPicker.setColors(ColorPalette.getAccentColors(activity.getApplicationContext())); - changeTextColor(WHITE); - colorPicker.setOnColorChangedListener( - new OnColorChangedListener() { - @Override - public void onColorChanged(int c) { - mTextColorSelector.setColorFilter(c); - dialogTitle.setBackgroundColor(c); - changeTextColor(colorPicker.getColor()); - } - }); - dialogBuilder.setView(dialogLayout); - dialogBuilder.setNeutralButton( - getString(R.string.cancel).toUpperCase(), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - mTextColorSelector.setColorFilter(WHITE); - changeTextColor(WHITE); - dialog.cancel(); - } - }); - dialogBuilder.setPositiveButton( - getString(R.string.ok_action).toUpperCase(), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - changeTextColor(colorPicker.getColor()); - } - }); - dialogBuilder.setOnDismissListener( - new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - dialog.dismiss(); - } - }); - dialogBuilder.show(); + final ColorPickerDialog colorPickerDialog = + new ColorPickerDialog() + .withPresets(ColorPalette.getAccentColors(activity.getApplicationContext())) + .withTitle(getString(R.string.text_color_title)) + .withListener( + (pickerView, color) -> { + mTextColorSelector.setColorFilter(color); + changeTextColor(color); + }); + colorPickerDialog.show(getChildFragmentManager(), "ColorPicker"); } private void changeTextColor(int newColor) { diff --git a/app/src/main/java/org/fossasia/phimpme/editor/fragment/PaintFragment.java b/app/src/main/java/org/fossasia/phimpme/editor/fragment/PaintFragment.java index edce896d2..196e0e589 100644 --- a/app/src/main/java/org/fossasia/phimpme/editor/fragment/PaintFragment.java +++ b/app/src/main/java/org/fossasia/phimpme/editor/fragment/PaintFragment.java @@ -1,6 +1,5 @@ package org.fossasia.phimpme.editor.fragment; -import android.content.DialogInterface; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -15,10 +14,9 @@ import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.SeekBar; -import android.widget.TextView; -import androidx.appcompat.app.AlertDialog; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import me.jfenn.colorpickerdialog.dialogs.ColorPickerDialog; import org.fossasia.phimpme.MyApplication; import org.fossasia.phimpme.R; import org.fossasia.phimpme.editor.EditImageActivity; @@ -28,8 +26,6 @@ import org.fossasia.phimpme.editor.view.CustomPaintView; import org.fossasia.phimpme.editor.view.PaintModeView; import org.fossasia.phimpme.gallery.util.ColorPalette; -import uz.shift.colorpicker.LineColorPicker; -import uz.shift.colorpicker.OnColorChangedListener; public class PaintFragment extends BaseEditFragment implements View.OnClickListener, ColorListAdapter.IColorListAction { @@ -209,44 +205,12 @@ public void onMoreSelected(int position) { } private void selectPaintColor() { - final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity()); - final View dialogLayout = - getActivity().getLayoutInflater().inflate(R.layout.color_piker_accent, null); - final LineColorPicker colorPicker = dialogLayout.findViewById(R.id.color_picker_accent); - final TextView dialogTitle = dialogLayout.findViewById(R.id.cp_accent_title); - dialogTitle.setText(R.string.paint_color_title); - colorPicker.setColors(ColorPalette.getAccentColors(activity.getApplicationContext())); - colorPicker.setOnColorChangedListener( - new OnColorChangedListener() { - @Override - public void onColorChanged(int c) { - dialogTitle.setBackgroundColor(c); - } - }); - dialogBuilder.setView(dialogLayout); - dialogBuilder.setNeutralButton( - getString(R.string.cancel).toUpperCase(), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - } - }); - dialogBuilder.setPositiveButton( - getString(R.string.ok_action).toUpperCase(), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - setPaintColor(colorPicker.getColor()); - } - }); - dialogBuilder.setOnDismissListener( - new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - dialog.dismiss(); - } - }); - dialogBuilder.show(); + final ColorPickerDialog colorPickerDialog = + new ColorPickerDialog() + .withPresets(ColorPalette.getAccentColors(activity.getApplicationContext())) + .withTitle(getString(R.string.paint_color_title)) + .withListener((pickerView, color) -> setPaintColor(color)); + colorPickerDialog.show(getChildFragmentManager(), "ColorPicker"); } protected void setPaintColor(final int paintColor) { diff --git a/app/src/main/java/org/fossasia/phimpme/gallery/activities/SettingsActivity.java b/app/src/main/java/org/fossasia/phimpme/gallery/activities/SettingsActivity.java index 802556390..5bc01700b 100644 --- a/app/src/main/java/org/fossasia/phimpme/gallery/activities/SettingsActivity.java +++ b/app/src/main/java/org/fossasia/phimpme/gallery/activities/SettingsActivity.java @@ -33,6 +33,8 @@ import com.mikepenz.community_material_typeface_library.CommunityMaterial; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.iconics.view.IconicsImageView; +import me.jfenn.colorpickerdialog.dialogs.ColorPickerDialog; +import me.jfenn.colorpickerdialog.views.picker.PresetPickerView; import org.fossasia.phimpme.R; import org.fossasia.phimpme.base.ThemedActivity; import org.fossasia.phimpme.gallery.util.AlertDialogsHelper; @@ -43,8 +45,6 @@ import org.fossasia.phimpme.opencamera.Camera.MyPreferenceFragment; import org.fossasia.phimpme.opencamera.Camera.PreferenceKeys; import org.fossasia.phimpme.utilities.ActivitySwitchHelper; -import uz.shift.colorpicker.LineColorPicker; -import uz.shift.colorpicker.OnColorChangedListener; /** Created by Jibo on 02/03/2016. */ @SuppressWarnings("ResourceAsColor") @@ -730,83 +730,30 @@ public void onClick(DialogInterface dialog, int which) { } private void primaryColorPiker() { - final AlertDialog.Builder dialogBuilder = - new AlertDialog.Builder(SettingsActivity.this, getDialogStyle()); - - final View dialogLayout = getLayoutInflater().inflate(R.layout.color_piker_primary, null); - final LineColorPicker colorPicker = dialogLayout.findViewById(R.id.color_picker_primary); - final LineColorPicker colorPicker2 = dialogLayout.findViewById(R.id.color_picker_primary_2); - final TextView dialogTitle = dialogLayout.findViewById(R.id.cp_primary_title); - CardView dialogCardView = dialogLayout.findViewById(R.id.cp_primary_card); - dialogCardView.setCardBackgroundColor(getCardBackgroundColor()); - - setColor(colorPicker, colorPicker2, dialogTitle); - - dialogBuilder.setView(dialogLayout); - - dialogBuilder.setNeutralButton( - getString(R.string.cancel).toUpperCase(), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (isTranslucentStatusBar()) { - getWindow().setStatusBarColor(ColorPalette.getObscuredColor(getPrimaryColor())); - } else getWindow().setStatusBarColor(getPrimaryColor()); - } - toolbar.setBackgroundColor(getPrimaryColor()); - dialog.cancel(); - } - }); - - dialogBuilder.setPositiveButton( - getString(R.string.ok_action).toUpperCase(), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - SP.putInt(getString(R.string.preference_primary_color), colorPicker2.getColor()); - updateTheme(); - accentcolourchange(colorPicker2.getColor()); - if (swNavBar.isChecked()) setNavBarColor(); - - setScrollViewColor(scr); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (isTranslucentStatusBar()) { - getWindow().setStatusBarColor(ColorPalette.getObscuredColor(getPrimaryColor())); - } else { - getWindow().setStatusBarColor(getPrimaryColor()); - } - } - } - }); - - dialogBuilder.setOnDismissListener( - new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (isTranslucentStatusBar()) { - getWindow().setStatusBarColor(ColorPalette.getObscuredColor(getPrimaryColor())); - } else getWindow().setStatusBarColor(getPrimaryColor()); - if (isNavigationBarColored() && swNavBar.isChecked()) - getWindow().setNavigationBarColor(getPrimaryColor()); - else - getWindow() - .setNavigationBarColor( - ContextCompat.getColor(getApplicationContext(), R.color.md_black_1000)); - } - toolbar.setBackgroundColor(getPrimaryColor()); - } - }); - AlertDialog alertDialog = dialogBuilder.create(); - alertDialog.show(); - AlertDialogsHelper.setButtonTextColor( - new int[] { - DialogInterface.BUTTON_POSITIVE, - DialogInterface.BUTTON_NEGATIVE, - DialogInterface.BUTTON_NEUTRAL - }, - getAccentColor(), - alertDialog); + final ColorPickerDialog colorPickerDialog = + new ColorPickerDialog() + .withPresets(ColorPalette.getAccentColors(this)) + .withTitle(getString(R.string.primary_color)) + .withColor(getPrimaryColor()) + .withListener( + (pickerView, color) -> { + SP.putInt(getString(R.string.preference_primary_color), color); + updateTheme(); + accentcolourchange(color); + if (swNavBar.isChecked()) setNavBarColor(); + + setScrollViewColor(scr); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (isTranslucentStatusBar()) { + getWindow() + .setStatusBarColor(ColorPalette.getObscuredColor(getPrimaryColor())); + } else { + getWindow().setStatusBarColor(getPrimaryColor()); + } + } + toolbar.setBackgroundColor(getPrimaryColor()); + }); + colorPickerDialog.show(getSupportFragmentManager(), "ColorPicker"); } private void accentcolourchange(final int color) { @@ -840,148 +787,19 @@ public void onClick(DialogInterface dialogInterface, int i) { alertDialog); } - private void setColor( - final LineColorPicker colorPicker, - final LineColorPicker colorPicker2, - final TextView dialogTitle) { - colorPicker.setColors(ColorPalette.getBaseColors(getApplicationContext())); - for (int i : colorPicker.getColors()) - for (int i2 : ColorPalette.getColors(getBaseContext(), i)) - if (i2 == getPrimaryColor()) { - colorPicker.setSelectedColor(i); - colorPicker2.setColors(ColorPalette.getColors(getBaseContext(), i)); - colorPicker2.setSelectedColor(i2); - break; - } - - dialogTitle.setBackgroundColor(getPrimaryColor()); - - colorPicker.setOnColorChangedListener( - new OnColorChangedListener() { - @Override - public void onColorChanged(int c) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (isTranslucentStatusBar()) { - getWindow().setStatusBarColor(ColorPalette.getObscuredColor(getPrimaryColor())); - } else getWindow().setStatusBarColor(c); - } - - toolbar.setBackgroundColor(c); - dialogTitle.setBackgroundColor(c); - colorPicker2.setColors( - ColorPalette.getColors(getApplicationContext(), colorPicker.getColor())); - colorPicker2.setSelectedColor(colorPicker.getColor()); - } - }); - colorPicker2.setOnColorChangedListener( - new OnColorChangedListener() { - @Override - public void onColorChanged(int c) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (isTranslucentStatusBar()) { - getWindow().setStatusBarColor(ColorPalette.getObscuredColor(c)); - } else getWindow().setStatusBarColor(c); - if (isNavigationBarColored()) getWindow().setNavigationBarColor(c); - else - getWindow() - .setNavigationBarColor( - ContextCompat.getColor(getApplicationContext(), R.color.md_black_1000)); - } - toolbar.setBackgroundColor(c); - dialogTitle.setBackgroundColor(c); - } - }); - } - private void accentColorPiker() { - final AlertDialog.Builder dialogBuilder = - new AlertDialog.Builder(SettingsActivity.this, getDialogStyle()); - - final View dialogLayout = getLayoutInflater().inflate(R.layout.color_piker_accent, null); - final LineColorPicker colorPicker = dialogLayout.findViewById(R.id.color_picker_accent); - final LineColorPicker colorPicker2 = dialogLayout.findViewById(R.id.color_picker_accent_2); - colorPicker2.setVisibility(View.VISIBLE); - final TextView dialogTitle = dialogLayout.findViewById(R.id.cp_accent_title); - CardView cv = dialogLayout.findViewById(R.id.cp_accent_card); - cv.setCardBackgroundColor(getCardBackgroundColor()); - - setColor2(colorPicker, colorPicker2, dialogTitle); - dialogTitle.setBackgroundColor(getAccentColor()); - - dialogBuilder.setView(dialogLayout); - - dialogBuilder.setNeutralButton( - getString(R.string.cancel).toUpperCase(), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - updateViewswithAccentColor(getAccentColor()); - } - }); - dialogBuilder.setPositiveButton( - getString(R.string.ok_action).toUpperCase(), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - SP.putInt(getString(R.string.preference_accent_color), colorPicker2.getColor()); - updateTheme(); - updateViewswithAccentColor(getAccentColor()); - } - }); - dialogBuilder.setOnDismissListener( - new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - updateViewswithAccentColor(getAccentColor()); - } - }); - AlertDialog alertDialog = dialogBuilder.create(); - alertDialog.show(); - AlertDialogsHelper.setButtonTextColor( - new int[] { - DialogInterface.BUTTON_POSITIVE, - DialogInterface.BUTTON_NEGATIVE, - DialogInterface.BUTTON_NEUTRAL - }, - getAccentColor(), - alertDialog); - } - - private void setColor2( - final LineColorPicker colorPicker, - final LineColorPicker colorPicker2, - final TextView dialogTitle) { - colorPicker.setColors(ColorPalette.getBaseColors(getApplicationContext())); - for (int i : colorPicker.getColors()) - for (int i2 : ColorPalette.getColors(getBaseContext(), i)) - if (i2 == getAccentColor()) { - colorPicker.setSelectedColor(i); - colorPicker2.setColors(ColorPalette.getColors(getBaseContext(), i)); - colorPicker2.setSelectedColor(i2); - break; - } - - dialogTitle.setBackgroundColor(getPrimaryColor()); - - colorPicker.setOnColorChangedListener( - new OnColorChangedListener() { - @Override - public void onColorChanged(int c) { - dialogTitle.setBackgroundColor(c); - updateViewswithAccentColor(c); - colorPicker2.setColors( - ColorPalette.getColors(getApplicationContext(), colorPicker.getColor())); - colorPicker2.setSelectedColor(colorPicker.getColor()); - } - }); - colorPicker2.setOnColorChangedListener( - new OnColorChangedListener() { - @Override - public void onColorChanged(int c) { - dialogTitle.setBackgroundColor(c); - updateViewswithAccentColor(c); - } - }); + final ColorPickerDialog colorPickerDialog = + new ColorPickerDialog() + .withPresets(ColorPalette.getAccentColors(this)) + .withTitle(getString(R.string.accent_color)) + .withListener( + (pickerView, color) -> { + SP.putInt(getString(R.string.preference_accent_color), color); + updateTheme(); + updateViewswithAccentColor(getAccentColor()); + }); + + colorPickerDialog.show(getSupportFragmentManager(), "ColorPicker"); } private void customizePictureViewer() { @@ -1040,13 +858,11 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { } }); updateSwitchColor(swApplyTheme_Viewer, getAccentColor()); - - final LineColorPicker transparencyColorPicker = + final PresetPickerView transparentColorPicker = dialogLayout.findViewById(R.id.pickerTransparent); - transparencyColorPicker.setColors(ColorPalette.getTransparencyShadows(getPrimaryColor())); - transparencyColorPicker.setSelectedColor( + transparentColorPicker.withPresets(ColorPalette.getTransparencyShadows(getPrimaryColor())); + transparentColorPicker.setColor( ColorPalette.getTransparentColor(getPrimaryColor(), getTransparency())); - /** TEXT VIEWS* */ ((TextView) dialogLayout.findViewById(R.id.seek_bar_alpha_title)).setTextColor(getTextColor()); ((TextView) dialogLayout.findViewById(R.id.seek_bar_alpha_title_Sub)) @@ -1061,7 +877,7 @@ public void onClick(DialogInterface dialog, int which) { SharedPreferences.Editor editor = SP.getEditor(); editor.putBoolean( getString(R.string.preference_apply_theme_pager), swApplyTheme_Viewer.isChecked()); - int c = Color.alpha(transparencyColorPicker.getColor()); + int c = Color.alpha(transparentColorPicker.getColor()); editor.putInt(getString(R.string.preference_transparency), 255 - c); editor.commit(); updateTheme(); diff --git a/app/src/main/res/layout/color_piker_accent.xml b/app/src/main/res/layout/color_piker_accent.xml deleted file mode 100644 index 9984d86e0..000000000 --- a/app/src/main/res/layout/color_piker_accent.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/color_piker_primary.xml b/app/src/main/res/layout/color_piker_primary.xml deleted file mode 100644 index 61cf9af8a..000000000 --- a/app/src/main/res/layout/color_piker_primary.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_media_viewer_theme.xml b/app/src/main/res/layout/dialog_media_viewer_theme.xml index 39a0f4d37..822d21147 100644 --- a/app/src/main/res/layout/dialog_media_viewer_theme.xml +++ b/app/src/main/res/layout/dialog_media_viewer_theme.xml @@ -1,8 +1,10 @@ - - + android:layout_height="wrap_content" + /> - - - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle index d65324917..277b001e6 100755 --- a/build.gradle +++ b/build.gradle @@ -29,8 +29,6 @@ allprojects { repositories { jcenter() mavenCentral() - maven { url "https://repo1.maven.org/maven2" } - maven { url "https://dl.bintray.com/dasar/maven" } maven { url 'https://maven.google.com/' name 'Google' From 3eb604e70474c44a487d36d5f6657231a4a8a69c Mon Sep 17 00:00:00 2001 From: Pranav Karthik <44630385+pranavkarthik10@users.noreply.github.com> Date: Wed, 1 Jan 2020 22:00:32 -0800 Subject: [PATCH 06/32] Add a download via QR code (#2957) * Add qr code download option * Update readme with qrcode * Update README.md Co-authored-by: ZORLAX5002 <35589598+ZORLAX5002@users.noreply.github.com> --- README.md | 3 +++ docs/images/phimp-me-qrcode.png | Bin 0 -> 2852 bytes 2 files changed, 3 insertions(+) create mode 100644 docs/images/phimp-me-qrcode.png diff --git a/README.md b/README.md index 226bd83ac..c35c19b9d 100755 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ |------------|-----------------|-------------|-----------------|-----------------|-----------------| | [![Build Status](https://travis-ci.org/fossasia/phimpme-android.svg?branch=master)](https://travis-ci.org/fossasia/phimpme-android) | [![Build Status](https://travis-ci.org/fossasia/phimpme-android.svg?branch=development)](https://travis-ci.org/fossasia/phimpme-android) | [![codecov](https://codecov.io/gh/fossasia/phimpme-android/branch/master/graph/badge.svg)](https://codecov.io/gh/fossasia/phimpme-android) | [![Codacy Badge](https://api.codacy.com/project/badge/Grade/4584003e734343b3b8ce94bcae6e9ca4)](https://www.codacy.com/app/harshithdwivedi/phimpme-android?utm_source=github.com&utm_medium=referral&utm_content=fossasia/phimpme-android&utm_campaign=Badge_Grade) | [![Gitter Room](https://img.shields.io/badge/gitter-join%20chat%20%E2%86%92-blue.svg)](https://gitter.im/fossasia/phimpme) | [![Twitter Follow](https://img.shields.io/twitter/follow/phimpme.svg?style=social&label=Follow&maxAge=2592000?style=flat-square)](https://twitter.com/phimpme) | +## Download from Play Store + + ## Screenshots

diff --git a/docs/images/phimp-me-qrcode.png b/docs/images/phimp-me-qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6ca91c9b8f6e24e4db2128f7fd4539a42a3a31 GIT binary patch literal 2852 zcmb_eYgkh076w$jluoJLyqh^{q&6onX=-?>EmDf)Wa%hPS%!{>O!Kb6F`a6Pi;Xd9 zCLM*;5=%wR5N*sNPHNs$Mk%w*3nmyEbeqrf0Jne=}|EOzF}!_X^E68c3Y*D z`HSESs?iq?UvYS&#V_$4Ywb?&VSMm-N4b5X_w&aOGu?#G46-J@P0}>O(cCn@6RtJB z&KF^)X)M$=qitfLKNr}>tn5yB6_63K9aa=0gx-WE6*9zG z8v zQL?HU5 zd_N!gB?aIqCOuV2g3uKHnwtBqC2ec{GdyvecKhL;b=IB5D(-|Wp~{(8R#e(FX*zMP zF)k!Q(>TyHNW+^!Mx>8dkL)vrYxU;$qC+;Fn4t&zzc9z$)9x^)`ovv$!j-jix(9yXU$@i}GeGXvwtcGPBbnC+U%6lcq7dg$vcX z_Vnr+$?I5vzZz}oKNbY%KHDO@Iq3q!Unq>|H6xC>L`Q7vh?KRIeN%Ns-Wxq)s^m^o z%d&FAOt`jN0mC&`S=!=2KsCltE)#nDC};Dz{f%q0Z#j%54l1s^4*c+j%6x5W5r#FP zWjSa|*?>CA0`pfbwV*wEuGtONfUkGsOk03Bez?x*b_40Tg(sAS>(sBDa@ijG-DrD% zkXO}}#r>)`REYO9x~Ngi9A{@HGyAoN*&f_yO5|O?y`>2Np9Jp6?i!F>c*RtmK3uD| z^Lz1|H3&z4Pg~B9=RsD?+1|7XY$nR}1`lUYl{d~H#WfZj>0nMro`VE$|5(tM2RA?b zoB=vLQ}Yx#29(La#J$sc4Rl54!?V!r>2DN4Un4uO( z5$YHN@ov4xdySNt#V`l=2u^jo2eMy8AT$8)VX{y}AsJEW@&ope6$_2D@(E%Y{=0Q& zo3*!`U#=@}e%kXQq-ZI+IU-@C+CDND6h68WykN0dlchqY=Ur|P1G-x5uqj09l@gM=5#rP{oo^uY5`X*W z;p1(p-Gph!Q5)n$ruI4!Hj~&nfz8J8`>7|BrAp+~M&i|FCuCV|Hb zZE6NM%{o9dIghsP@@Tf=o7kD#_cal{YOzW5DEEC;&YivjVrQjuM=^+^hVNeu&{B!@ zTvK9j80BxR#7Ec8aMNv_2Wo2}9*)1pY2sdiyMpaA4ID^KW&gvMOY%3FJUH&GsJ>_x zFZb@6jxB0bnavcMK^KN6gR+f3^t}x2oQlq{B=X}XP0M>vI8uO%Z6Lq5rvMvOmo)IQ z8q64v^Ws8&s3=4b17-eda}jWA4ERZ;EUHp@DGswCY=^|EFh5>*C4d9=0MZRZ=&472 zJ_v}^GH1{(5l?Tu)bcBv|3!;-vr4u%n?GatMky+NW& z7>NW#s}7ieNH76e=-}sRo4~kDMT2o0@wq+GPPTLWY<^SyZSIe6w@8ArV-stxhPH-T z4zrcLX`?B`?18SY3$7%;vS^}9A({^qfXOFtuoU?U!WPauzhbo%@{MVWbHdOC6;fTN zxW5$Z=%1mVcB}9D{OwjbM#Hq@dIVnLVzDeTzm$5&^@dEyJb7!D&BIaaeL(maC_NTX zTumNmikc4F#QDiVd)keGP()981u1fXU9037tB75}1p=>6J7W3uV{WoCKtiYOt?v z_oan;!Q2bRc&H;P1@on~4im2|Ib9pl!mtEjMFCjUWo1uyDtMR<+AbHy^D3PXj$c+Z zB)3g(R&6oRPb6kfVDExs0Vf3oY-qGhg_qP5&O^&24OlgfCOA%%n^(e11JD$&DK{y*gp43Uacy?MX+xU#W)kgK=n;m=JOF<5fBVgjC jlq0ji@csWh{spej{^nv%dtt)z2^F&|IDqSS=pTOq&!8$< literal 0 HcmV?d00001 From 5a7f7ec7220dc403d7f3602d24fe5138047f95a9 Mon Sep 17 00:00:00 2001 From: Kumuditha Udayanga Karunarathna Date: Sat, 4 Jan 2020 03:02:01 +0530 Subject: [PATCH 07/32] Build Doc using README.md (#2965) --- docs/sources/conf.py | 5 ++--- docs/sources/index.rst | 3 ++- scripts/upload-gh-pages.sh | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/sources/conf.py b/docs/sources/conf.py index 965be237e..ba458ea98 100644 --- a/docs/sources/conf.py +++ b/docs/sources/conf.py @@ -28,8 +28,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = [ -] +extensions = ['m2r'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -50,4 +49,4 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] \ No newline at end of file +html_static_path = ['_static'] diff --git a/docs/sources/index.rst b/docs/sources/index.rst index 1d18e4bda..f41d9a13e 100644 --- a/docs/sources/index.rst +++ b/docs/sources/index.rst @@ -4,6 +4,7 @@ contain the root `toctree` directive. Welcome to Phimp.me's documentation! ======================================= +.. mdinclude:: ../../README.md .. toctree:: :maxdepth: 2 @@ -16,4 +17,4 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` -* :ref:`search` \ No newline at end of file +* :ref:`search` diff --git a/scripts/upload-gh-pages.sh b/scripts/upload-gh-pages.sh index c08661aaf..bf37b7e49 100644 --- a/scripts/upload-gh-pages.sh +++ b/scripts/upload-gh-pages.sh @@ -4,11 +4,17 @@ git config --global user.name "Travis CI" git config --global user.email "noreply+travis@fossasia.org" sudo pip install Sphinx +sudo pip install m2r cd docs/sources make html +# Copy image files. +mkdir _build/html/docs +cp -r ../images _build/html/docs +cp -r ../../fastlane _build/html + git clone --quiet --branch=gh-pages https://fossasia:$GITHUB_API_KEY@github.com/fossasia/phimpme-android gh-pages > /dev/null cd gh-pages From 4440cd3491f0cd67aa19d58d684038cb94a6d020 Mon Sep 17 00:00:00 2001 From: Kumuditha Udayanga Karunarathna Date: Sat, 4 Jan 2020 19:31:44 +0530 Subject: [PATCH 08/32] Add material UI theme to documentation site (#2970) * Add material UI theme to documentation site * Update github username in upload-gh-pages --- .travis.yml | 172 +++++++++++++++++++------------------ docs/sources/conf.py | 17 +++- docs/sources/index.rst | 12 +-- scripts/upload-gh-pages.sh | 7 +- 4 files changed, 109 insertions(+), 99 deletions(-) diff --git a/.travis.yml b/.travis.yml index c245cb753..1085553b3 100755 --- a/.travis.yml +++ b/.travis.yml @@ -1,96 +1,104 @@ -language: android -jdk: oraclejdk8 -sudo: true -dist: trusty +jobs: + include: + - language: android + jdk: oraclejdk8 + sudo: true + dist: trusty -env: - global: - - ANDROID_API_LEVEL=22 - - ANDROID_BUILD_TOOLS_VERSION=28.0.3 - - ANDROID_ABI=armeabi-v7a arm64-v8a x86 x86_64 - - ANDROID_TAG=google_apis - - ANDROID_TARGET=android-25 - - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default) + env: + - ANDROID_API_LEVEL=22 + - ANDROID_BUILD_TOOLS_VERSION=28.0.3 + - ANDROID_ABI=armeabi-v7a arm64-v8a x86 x86_64 + - ANDROID_TAG=google_apis + - ANDROID_TARGET=android-25 + - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default) -android: - components: - - tools - - platform-tools - - android-$ANDROID_API_LEVEL - - build-tools-$ANDROID_BUILD_TOOLS_VERSION - - android-$ANDROID_API_LEVEL - # For Google APIs - - addon-google_apis-google-$ANDROID_API_LEVEL - # Google Play Services - - extra-google-google_play_services - # Support library - - extra-android-support - # Latest artifacts in local repository - - extra-google-m2repository - - extra-android-m2repository - - android-sdk-license-.+ - - '.+' - # Specify at least one system image - - sys-img-armeabi-v7a-android-$ANDROID_API_LEVEL + android: + components: + - tools + - platform-tools + - android-$ANDROID_API_LEVEL + - build-tools-$ANDROID_BUILD_TOOLS_VERSION + - android-$ANDROID_API_LEVEL + # For Google APIs + - addon-google_apis-google-$ANDROID_API_LEVEL + # Google Play Services + - extra-google-google_play_services + # Support library + - extra-android-support + # Latest artifacts in local repository + - extra-google-m2repository + - extra-android-m2repository + - android-sdk-license-.+ + - '.+' + # Specify at least one system image + - sys-img-armeabi-v7a-android-$ANDROID_API_LEVEL -# prevents reuploading of Cache -before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + # prevents reuploading of Cache + before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock -cache: - directories: - - "${TRAVIS_BUILD_DIR}/android/gradle/caches/" - - "${TRAVIS_BUILD_DIR}/android/gradle/wrapper/dists/" - - "$HOME/android/.gradle/caches/" - - "$HOME/android/.gradle/wrapper/" - - "$HOME/.android/build-cache" - - "${TRAVIS_BUILD_DIR}/cache" + cache: + directories: + - "${TRAVIS_BUILD_DIR}/android/gradle/caches/" + - "${TRAVIS_BUILD_DIR}/android/gradle/wrapper/dists/" + - "$HOME/android/.gradle/caches/" + - "$HOME/android/.gradle/wrapper/" + - "$HOME/.android/build-cache" + - "${TRAVIS_BUILD_DIR}/cache" -before_install: - - mkdir "$ANDROID_HOME/licenses" || true - - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" - - curl https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip -o android-ndk-r18b.zip - - unzip -q android-ndk-r18b.zip && rm android-ndk-r18b.zip - - mv android-ndk-r18b $HOME - - export ANDROID_NDK=$HOME/android-ndk-r18b + before_install: + - mkdir "$ANDROID_HOME/licenses" || true + - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" + - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" + - curl https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip -o android-ndk-r18b.zip + - unzip -q android-ndk-r18b.zip && rm android-ndk-r18b.zip + - mv android-ndk-r18b $HOME + - export ANDROID_NDK=$HOME/android-ndk-r18b -install: - - sdkmanager --list || true - - echo yes | ${ANDROID_HOME}/tools/bin/sdkmanager "platforms;android-26" - - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" - - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2" + install: + - sdkmanager --list || true + - echo yes | ${ANDROID_HOME}/tools/bin/sdkmanager "platforms;android-26" + - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" + - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2" -licenses: - - 'android-sdk-preview-license-.+' - - 'android-sdk-license-.+' - - 'google-gdk-license-.+' + licenses: + - 'android-sdk-preview-license-.+' + - 'android-sdk-license-.+' + - 'google-gdk-license-.+' -before_script: - - ./scripts/setup_opencv.sh - - echo "Starting AVD" - - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a - - emulator -avd test -no-audio -no-window & - - android-wait-for-emulator - - adb shell input keyevent 82 & - - bash scripts/prep-key.sh + before_script: + - ./scripts/setup_opencv.sh + - echo "Starting AVD" + - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a + - emulator -avd test -no-audio -no-window & + - android-wait-for-emulator + - adb shell input keyevent 82 & + - bash scripts/prep-key.sh -script: - - ./gradlew spotlessCheck - - ./gradlew build - - ./gradlew build connectedAndroidTest jacocoTestReport --stacktrace + script: + - ./gradlew spotlessCheck + - ./gradlew build + - ./gradlew build connectedAndroidTest jacocoTestReport --stacktrace -after_success: - - bash <(curl -s https://codecov.io/bash) - - bash scripts/update-apk.sh + after_success: + - bash <(curl -s https://codecov.io/bash) + - bash scripts/update-apk.sh -deploy: - - provider: script - skip_cleanup: true - script: bash scripts/upload-gh-pages.sh - on: - all_branches: true + - language: python + python: 3.7 + install: + - pip install Sphinx + - pip install git+https://github.com/bashtage/sphinx-material + - pip install m2r + script: skip + deploy: + - provider: script + skip_cleanup: true + script: bash scripts/upload-gh-pages.sh + on: + all_branches: true notifications: - slack: fossasia:JgzycrBUs0nKnmJhsAxCB4bL \ No newline at end of file + slack: fossasia:JgzycrBUs0nKnmJhsAxCB4bL diff --git a/docs/sources/conf.py b/docs/sources/conf.py index ba458ea98..a2130eeb5 100644 --- a/docs/sources/conf.py +++ b/docs/sources/conf.py @@ -13,7 +13,7 @@ # import os # import sys # sys.path.insert(0, os.path.abspath('.')) - +import sphinx_material # -- Project information ----------------------------------------------------- @@ -28,7 +28,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['m2r'] +extensions = ['m2r', 'sphinx_material'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -44,9 +44,20 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = 'sphinx_material' + +# Get the them path +html_theme_path = sphinx_material.html_theme_path() +# Register the required helpers for the html context +html_context = sphinx_material.get_html_context() # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] + +html_theme_options = { + # Set the color and the accent color + 'color_primary': 'blue', + 'color_accent': 'light-blue', +} diff --git a/docs/sources/index.rst b/docs/sources/index.rst index f41d9a13e..8fb99317f 100644 --- a/docs/sources/index.rst +++ b/docs/sources/index.rst @@ -2,19 +2,9 @@ sphinx-quickstart on Mon Aug 11 13:46:17 2019. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to Phimp.me's documentation! -======================================= + .. mdinclude:: ../../README.md .. toctree:: :maxdepth: 2 :caption: Contents: - - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/scripts/upload-gh-pages.sh b/scripts/upload-gh-pages.sh index bf37b7e49..c951d9f1d 100644 --- a/scripts/upload-gh-pages.sh +++ b/scripts/upload-gh-pages.sh @@ -3,12 +3,12 @@ git config --global user.name "Travis CI" git config --global user.email "noreply+travis@fossasia.org" -sudo pip install Sphinx -sudo pip install m2r - cd docs/sources make html +mkdir _build/html/docs +cp -r ../images _build/html/docs +cp -r ../../fastlane _build/html # Copy image files. mkdir _build/html/docs @@ -16,6 +16,7 @@ cp -r ../images _build/html/docs cp -r ../../fastlane _build/html git clone --quiet --branch=gh-pages https://fossasia:$GITHUB_API_KEY@github.com/fossasia/phimpme-android gh-pages > /dev/null + cd gh-pages rm -rf * From 91c92e74eb5ec546b896d5d4ae5709fb41f07f5e Mon Sep 17 00:00:00 2001 From: Siddharth Sinha Date: Mon, 6 Jan 2020 18:29:14 +0530 Subject: [PATCH 09/32] Added Changelog in website (#2975) * added social media links * added Changelog to the website and fixed link --- .travis.yml | 1 + README.md | 2 +- docs/sources/conf.py | 2 +- docs/sources/index.rst | 4 ++++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1085553b3..60cbac25f 100755 --- a/.travis.yml +++ b/.travis.yml @@ -92,6 +92,7 @@ jobs: - pip install Sphinx - pip install git+https://github.com/bashtage/sphinx-material - pip install m2r + - pip install sphinx-git script: skip deploy: - provider: script diff --git a/README.md b/README.md index c35c19b9d..7f276bbcb 100755 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ We have the following branches This branch contains automatically generated apk file for testing. * **gh-pages** - Hosting the landing page [phimp.me](http://phimp.me) + For reference gh-pages branch is hosting the Gihub-Pages link for this Repo at https://fossasia.github.io/phimpme-android/ ## Development Setup diff --git a/docs/sources/conf.py b/docs/sources/conf.py index a2130eeb5..592d1987c 100644 --- a/docs/sources/conf.py +++ b/docs/sources/conf.py @@ -28,7 +28,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['m2r', 'sphinx_material'] +extensions = ['m2r', 'sphinx_material',"sphinx_git"] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/docs/sources/index.rst b/docs/sources/index.rst index 8fb99317f..0c93296b3 100644 --- a/docs/sources/index.rst +++ b/docs/sources/index.rst @@ -5,6 +5,10 @@ .. mdinclude:: ../../README.md +Change Log (Commits) +======= +.. git_changelog:: + .. toctree:: :maxdepth: 2 :caption: Contents: From 1aa77430b17c9181016225acb6fd049fe258240d Mon Sep 17 00:00:00 2001 From: Sonu Sourav Date: Wed, 15 Jan 2020 22:28:29 +0530 Subject: [PATCH 10/32] Fixed Pinterest issue. --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aa7352eae..ff4a0e3e7 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -338,7 +338,7 @@ - + Date: Mon, 27 Jan 2020 00:10:45 +0530 Subject: [PATCH 11/32] build(deps): bump lib from 10.0.3 to 10.1.4 (#2994) Bumps [lib](https://github.com/krimin-killr21/MaterialScrollBar) from 10.0.3 to 10.1.4. - [Release notes](https://github.com/krimin-killr21/MaterialScrollBar/releases) - [Commits](https://github.com/krimin-killr21/MaterialScrollBar/commits) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 app/build.gradle diff --git a/app/build.gradle b/app/build.gradle old mode 100755 new mode 100644 index 219595f86..ca9d955dc --- a/app/build.gradle +++ b/app/build.gradle @@ -189,7 +189,7 @@ dependencies { //ui implementation 'de.hdodenhof:circleimageview:2.0.0' implementation 'me.jfenn.ColorPickerDialog:base:0.2.1' - implementation 'com.turingtechnologies.materialscrollbar:lib:10.0.3' + implementation 'com.turingtechnologies.materialscrollbar:lib:10.1.4' implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.7' implementation 'com.github.shchurov:horizontalwheelview:0.9.5' implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.4' From e3c00122a4ab4bbac5292677b648921a83c6c2e8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2020 00:11:03 +0530 Subject: [PATCH 12/32] build(deps): bump realm-gradle-plugin from 5.15.1 to 6.1.0 (#2996) Bumps [realm-gradle-plugin](https://github.com/realm/realm-java) from 5.15.1 to 6.1.0. - [Release notes](https://github.com/realm/realm-java/releases) - [Changelog](https://github.com/realm/realm-java/blob/master/CHANGELOG.md) - [Commits](https://github.com/realm/realm-java/compare/v5.15.1...v6.1.0) Signed-off-by: dependabot-preview[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 build.gradle diff --git a/build.gradle b/build.gradle old mode 100755 new mode 100644 index 277b001e6..0bd3898d7 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.realm_version = '5.15.1' + ext.realm_version = '6.1.0' repositories { jcenter() From 19d75ab7c1bc5cd5963068d45572e984fe1fb5f6 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2020 00:11:13 +0530 Subject: [PATCH 13/32] build(deps): bump jumblr from 0.0.11 to 0.0.13 (#2997) Bumps [jumblr](https://github.com/tumblr/jumblr) from 0.0.11 to 0.0.13. - [Release notes](https://github.com/tumblr/jumblr/releases) - [Commits](https://github.com/tumblr/jumblr/compare/jumblr-0.0.11...jumblr-0.0.13) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index ca9d955dc..b48309441 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -212,7 +212,7 @@ dependencies { releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' //tumblr - implementation('com.tumblr:jumblr:0.0.11') { + implementation('com.tumblr:jumblr:0.0.13') { exclude module: 'scribe' } From 85a6e970c3b74ef62caf8dedf2465287a936ff72 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2020 13:47:06 +0530 Subject: [PATCH 14/32] build(deps): bump logging-interceptor from 4.2.0 to 4.3.1 (#3006) Bumps [logging-interceptor](https://github.com/square/okhttp) from 4.2.0 to 4.3.1. - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.2.0...parent-4.3.1) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index b48309441..ce29775d9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,7 +144,7 @@ dependencies { //retrofit implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion" implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion" - implementation 'com.squareup.okhttp3:logging-interceptor:4.2.0' + implementation 'com.squareup.okhttp3:logging-interceptor:4.3.1' //google and support implementation "androidx.appcompat:appcompat:$rootProject.supportLibraryVersion" From 96f9e4bee6ee9759acec115b54a8b55cfa9efb50 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2020 13:47:18 +0530 Subject: [PATCH 15/32] build(deps): bump lifecycle-extensions from 2.1.0 to 2.2.0 (#3004) Bumps lifecycle-extensions from 2.1.0 to 2.2.0. Signed-off-by: dependabot-preview[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0bd3898d7..d99ad94a1 100644 --- a/build.gradle +++ b/build.gradle @@ -49,7 +49,7 @@ ext { stethoVersion = "1.5.0" showcaseVersion = "5.4.3" nextCloudVersion = "1.5.0" - lifecycleVersion = "2.1.0" + lifecycleVersion = "2.2.0" glideVersion = "4.10.0" retrofitVersion = "2.6.2" } From 2f6f17cdb47712fbd47f086c0b52f3d2bd39388b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2020 13:47:26 +0530 Subject: [PATCH 16/32] build(deps): bump circleimageview from 2.0.0 to 3.1.0 (#3003) Bumps [circleimageview](https://github.com/hdodenhof/CircleImageView) from 2.0.0 to 3.1.0. - [Release notes](https://github.com/hdodenhof/CircleImageView/releases) - [Commits](https://github.com/hdodenhof/CircleImageView/compare/v2.0.0...v3.1.0) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index ce29775d9..408167fba 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -187,7 +187,7 @@ dependencies { implementation 'com.mikepenz:ionicons-typeface:+@aar' //ui - implementation 'de.hdodenhof:circleimageview:2.0.0' + implementation 'de.hdodenhof:circleimageview:3.1.0' implementation 'me.jfenn.ColorPickerDialog:base:0.2.1' implementation 'com.turingtechnologies.materialscrollbar:lib:10.1.4' implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.7' From f6bdf5cf011aad09905478195a140e19f5c888f5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2020 13:47:46 +0530 Subject: [PATCH 17/32] build(deps): bump ion from 2.1.7 to 3.0.8 (#3000) Bumps [ion](https://github.com/koush/ion) from 2.1.7 to 3.0.8. - [Release notes](https://github.com/koush/ion/releases) - [Changelog](https://github.com/koush/ion/blob/master/CHANGELOG.md) - [Commits](https://github.com/koush/ion/commits) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 408167fba..1c162f9d0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -174,7 +174,7 @@ dependencies { transitive = true; }*/ - implementation 'com.koushikdutta.ion:ion:2.1.7' + implementation 'com.koushikdutta.ion:ion:3.0.8' implementation 'org.jetbrains:annotations-java5:15.0' implementation 'com.android.support:multidex:1.0.3' implementation group: 'com.box', name: 'box-android-sdk', version: '5.0.0' From 74684a439f9617be067524c40fddccc80e527db2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2020 14:02:34 +0530 Subject: [PATCH 18/32] build(deps): bump rootProject.glideVersion from 4.10.0 to 4.11.0 (#3001) Bumps `rootProject.glideVersion` from 4.10.0 to 4.11.0. Updates `glide` from 4.10.0 to 4.11.0 - [Release notes](https://github.com/bumptech/glide/releases) - [Commits](https://github.com/bumptech/glide/compare/v4.10.0...v4.11.0) Updates `gifencoder-integration` from 4.10.0 to 4.11.0 - [Release notes](https://github.com/bumptech/glide/releases) - [Commits](https://github.com/bumptech/glide/compare/v4.10.0...v4.11.0) Signed-off-by: dependabot-preview[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d99ad94a1..3aa353bce 100644 --- a/build.gradle +++ b/build.gradle @@ -50,7 +50,7 @@ ext { showcaseVersion = "5.4.3" nextCloudVersion = "1.5.0" lifecycleVersion = "2.2.0" - glideVersion = "4.10.0" + glideVersion = "4.11.0" retrofitVersion = "2.6.2" } From a01b005849b50f15dff6192d623d243077a28eaf Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2020 20:17:35 +0530 Subject: [PATCH 19/32] build(deps): bump annotations-java5 from 15.0 to 18.0.0 (#3008) Bumps [annotations-java5](https://github.com/JetBrains/java-annotations) from 15.0 to 18.0.0. - [Release notes](https://github.com/JetBrains/java-annotations/releases) - [Commits](https://github.com/JetBrains/java-annotations/commits/18.0.0) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 1c162f9d0..88b9d2d13 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -175,7 +175,7 @@ dependencies { }*/ implementation 'com.koushikdutta.ion:ion:3.0.8' - implementation 'org.jetbrains:annotations-java5:15.0' + implementation 'org.jetbrains:annotations-java5:18.0.0' implementation 'com.android.support:multidex:1.0.3' implementation group: 'com.box', name: 'box-android-sdk', version: '5.0.0' From b85223486c9d72edcfc8df1df4f1d20d18b3802c Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2020 22:25:58 +0530 Subject: [PATCH 20/32] build(deps): bump android-gif-drawable from 1.2.7 to 1.2.19 (#3009) Bumps [android-gif-drawable](https://github.com/koral--/android-gif-drawable) from 1.2.7 to 1.2.19. - [Release notes](https://github.com/koral--/android-gif-drawable/releases) - [Changelog](https://github.com/koral--/android-gif-drawable/blob/dev/CHANGELOG.md) - [Commits](https://github.com/koral--/android-gif-drawable/compare/v1.2.7...v1.2.19) Signed-off-by: dependabot-preview[bot] Co-authored-by: Yash Khare --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 88b9d2d13..4b324728d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -190,7 +190,7 @@ dependencies { implementation 'de.hdodenhof:circleimageview:3.1.0' implementation 'me.jfenn.ColorPickerDialog:base:0.2.1' implementation 'com.turingtechnologies.materialscrollbar:lib:10.1.4' - implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.7' + implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.19' implementation 'com.github.shchurov:horizontalwheelview:0.9.5' implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.4' From 68fe1f6e4ec6414ba0b0d3df8c2ed6a768dd4b3d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 7 Feb 2020 00:00:38 +0530 Subject: [PATCH 21/32] build(deps): bump leakcanary-android-no-op from 1.5.1 to 1.6.3 (#3011) Bumps [leakcanary-android-no-op](https://github.com/square/leakcanary) from 1.5.1 to 1.6.3. - [Release notes](https://github.com/square/leakcanary/releases) - [Changelog](https://github.com/square/leakcanary/blob/master/docs/changelog.md) - [Commits](https://github.com/square/leakcanary/compare/v1.5.1...v1.6.3) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 4b324728d..10f1a50c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -208,7 +208,7 @@ dependencies { implementation "com.github.nextcloud:android-library:$rootProject.nextCloudVersion" //leak canary - debugImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' + debugImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' //tumblr From 8c3c34ff686122151d74ce17bb7f3ab439588b25 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sun, 9 Feb 2020 14:42:27 +0530 Subject: [PATCH 22/32] build(deps): bump twitter4j-media-support from 3.0.5 to 4.0.6 (#3013) Bumps [twitter4j-media-support](https://github.com/yusuke/twitter4j) from 3.0.5 to 4.0.6. - [Release notes](https://github.com/yusuke/twitter4j/releases) - [Commits](https://github.com/yusuke/twitter4j/compare/3.0.5...4.0.6) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 10f1a50c2..c0994921b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -200,7 +200,7 @@ dependencies { //twitter implementation "com.twitter.sdk.android:twitter:$rootProject.twitterVersion" implementation "org.twitter4j:twitter4j-core:3.0.5" - implementation "org.twitter4j:twitter4j-media-support:3.0.5" + implementation "org.twitter4j:twitter4j-media-support:4.0.6" implementation 'com.dropbox.core:dropbox-core-sdk:3.1.1' From c41b222a0db7ba54cb6116849f616b404738c8f8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 15 Feb 2020 18:08:24 +0530 Subject: [PATCH 23/32] build(deps): bump material from 1.0.0 to 1.1.0 (#3015) Bumps [material](https://github.com/material-components/material-components-android) from 1.0.0 to 1.1.0. - [Release notes](https://github.com/material-components/material-components-android/releases) - [Commits](https://github.com/material-components/material-components-android/compare/1.0.0...1.1.0) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index c0994921b..c3cc2d297 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,7 +150,7 @@ dependencies { implementation "androidx.appcompat:appcompat:$rootProject.supportLibraryVersion" implementation "androidx.vectordrawable:vectordrawable-animated:1.1.0" implementation "androidx.legacy:legacy-support-v4:1.0.0" - implementation "com.google.android.material:material:1.0.0" + implementation "com.google.android.material:material:1.1.0" implementation "androidx.vectordrawable:vectordrawable:1.1.0" implementation "androidx.palette:palette:1.0.0" implementation "androidx.cardview:cardview:1.0.0" From ab19245c6639902e999cce5156cea2ef11ec5a7d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 15 Feb 2020 21:45:54 +0530 Subject: [PATCH 24/32] build(deps): bump browser from 1.0.0 to 1.2.0 (#3014) Bumps browser from 1.0.0 to 1.2.0. Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index c3cc2d297..746310d76 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -154,7 +154,7 @@ dependencies { implementation "androidx.vectordrawable:vectordrawable:1.1.0" implementation "androidx.palette:palette:1.0.0" implementation "androidx.cardview:cardview:1.0.0" - implementation "androidx.browser:browser:1.0.0" + implementation "androidx.browser:browser:1.2.0" implementation "androidx.recyclerview:recyclerview:1.0.0" implementation 'androidx.constraintlayout:constraintlayout:1.1.3' From a648699aa810df4ff7e4ad83df28f5bc27570923 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sun, 16 Feb 2020 12:16:41 +0530 Subject: [PATCH 25/32] build(deps): bump rootProject.butterknifeVersion from 10.2.0 to 10.2.1 (#3012) Bumps `rootProject.butterknifeVersion` from 10.2.0 to 10.2.1. Updates `butterknife` from 10.2.0 to 10.2.1 - [Release notes](https://github.com/JakeWharton/butterknife/releases) - [Changelog](https://github.com/JakeWharton/butterknife/blob/master/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/butterknife/compare/10.2.0...10.2.1) Updates `butterknife-compiler` from 10.2.0 to 10.2.1 - [Release notes](https://github.com/JakeWharton/butterknife/releases) - [Changelog](https://github.com/JakeWharton/butterknife/blob/master/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/butterknife/compare/10.2.0...10.2.1) Signed-off-by: dependabot-preview[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3aa353bce..9e4b59f4e 100644 --- a/build.gradle +++ b/build.gradle @@ -43,7 +43,7 @@ allprojects { ext { supportLibraryVersion = '1.1.0' - butterknifeVersion = '10.2.0' + butterknifeVersion = '10.2.1' junitVersion = "4.12" twitterVersion = "3.0.0" stethoVersion = "1.5.0" From abcda8bfa782a97a350bbe73317625155e7eeeb2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2020 21:24:44 +0000 Subject: [PATCH 26/32] build(deps): bump twitter from 3.0.0 to 3.3.0 Bumps twitter from 3.0.0 to 3.3.0. Signed-off-by: dependabot-preview[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9e4b59f4e..f9cf30bc8 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ ext { supportLibraryVersion = '1.1.0' butterknifeVersion = '10.2.1' junitVersion = "4.12" - twitterVersion = "3.0.0" + twitterVersion = "3.3.0" stethoVersion = "1.5.0" showcaseVersion = "5.4.3" nextCloudVersion = "1.5.0" From daba39b7b764a3e012e89c0c2b6318fd9c516870 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 22 Feb 2020 21:51:47 +0530 Subject: [PATCH 27/32] build(deps): bump logging-interceptor from 4.3.1 to 4.4.0 (#3029) Bumps [logging-interceptor](https://github.com/square/okhttp) from 4.3.1 to 4.4.0. - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.3.1...parent-4.4.0) Signed-off-by: dependabot-preview[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 746310d76..06e79bc42 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,7 +144,7 @@ dependencies { //retrofit implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion" implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion" - implementation 'com.squareup.okhttp3:logging-interceptor:4.3.1' + implementation 'com.squareup.okhttp3:logging-interceptor:4.4.0' //google and support implementation "androidx.appcompat:appcompat:$rootProject.supportLibraryVersion" From 84ae4ec3fdc88380c3e6f4e43d4663951a146bd8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2020 21:18:53 +0000 Subject: [PATCH 28/32] build(deps): bump rootProject.retrofitVersion from 2.6.2 to 2.7.2 Bumps `rootProject.retrofitVersion` from 2.6.2 to 2.7.2. Updates `retrofit` from 2.6.2 to 2.7.2 - [Release notes](https://github.com/square/retrofit/releases) - [Changelog](https://github.com/square/retrofit/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/retrofit/compare/parent-2.6.2...parent-2.7.2) Updates `converter-gson` from 2.6.2 to 2.7.2 Signed-off-by: dependabot-preview[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f9cf30bc8..a4ff8baf4 100644 --- a/build.gradle +++ b/build.gradle @@ -51,6 +51,6 @@ ext { nextCloudVersion = "1.5.0" lifecycleVersion = "2.2.0" glideVersion = "4.11.0" - retrofitVersion = "2.6.2" + retrofitVersion = "2.7.2" } From 1ca675e9d7c790542dd26c983bbf9de24de4e866 Mon Sep 17 00:00:00 2001 From: Ajay Singh Date: Mon, 9 Mar 2020 21:59:20 +0530 Subject: [PATCH 29/32] Menu item not visible properly in Trash Bin Dark AMOLED theme fixed (#3032) Co-authored-by: Abishek V Ashok Co-authored-by: Yash Khare --- app/src/main/res/values/styles.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 60be41f5e..c06500783 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -46,12 +46,14 @@ - -