From 214cde004c4f48fe763163ff93f092c09e71b035 Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Fri, 23 Dec 2016 08:45:59 -0800 Subject: [PATCH 01/42] Fix support for cm13 --- .idea/misc.xml | 2 +- app/build.gradle | 2 +- .../DesignerToolsApplication.java | 8 +- .../qs/ColorPickerQuickSettingsTile.java | 3 +- .../qs/GridQuickSettingsTile.java | 12 ++- .../qs/MockQuickSettingsTile.java | 11 ++- .../service/qs/ColorPickerTileService.java | 7 +- .../service/qs/GridOverlayTileService.java | 4 +- .../ui/ColorPickerCardFragment.java | 3 + .../designertools/utils/LaunchUtils.java | 89 ++++++++++++++----- 10 files changed, 98 insertions(+), 43 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb6828..5d19981 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 17e0574..0f9e34d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion "25.0.1" defaultConfig { - applicationId "com.cyngn.designertools" + applicationId "com.scheffsblend.designertools" minSdkVersion 23 targetSdkVersion 25 versionCode 2 diff --git a/app/src/main/java/org/cyanogenmod/designertools/DesignerToolsApplication.java b/app/src/main/java/org/cyanogenmod/designertools/DesignerToolsApplication.java index 3f78152..111eee1 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/DesignerToolsApplication.java +++ b/app/src/main/java/org/cyanogenmod/designertools/DesignerToolsApplication.java @@ -19,6 +19,8 @@ import android.app.Application; import android.content.Intent; +import org.cyanogenmod.designertools.utils.PreferenceUtils; + public class DesignerToolsApplication extends Application { private int mResultCode = Activity.RESULT_CANCELED; @@ -47,7 +49,7 @@ public void setGridOverlayOn(boolean on) { } public boolean getGridOverlayOn() { - return mGridOverlayOn; + return mGridOverlayOn || PreferenceUtils.getGridQsTileEnabled(this, false); } public void setMockOverlayOn(boolean on) { @@ -55,7 +57,7 @@ public void setMockOverlayOn(boolean on) { } public boolean getMockOverlayOn() { - return mMockOverlayOn; + return mMockOverlayOn || PreferenceUtils.getMockQsTileEnabled(this, false); } public void setColorPickerOn(boolean on) { @@ -63,7 +65,7 @@ public void setColorPickerOn(boolean on) { } public boolean getColorPickerOn() { - return mColorPickerOn; + return mColorPickerOn || PreferenceUtils.getColorPickerQsTileEnabled(this, false); } public void setScreenshotOn(boolean on) { diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java index e56291f..aed48d3 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java +++ b/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java @@ -24,6 +24,7 @@ import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.overlays.ColorPickerOverlay; import org.cyanogenmod.designertools.ui.ScreenRecordRequestActivity; +import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; import org.cyanogenmod.designertools.R; @@ -77,7 +78,7 @@ public void onReceive(Context context, Intent intent) { intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); if (state == OnOffTileState.STATE_OFF) { publishColorPickerTile(context, OnOffTileState.STATE_ON); - startColorPickerOrRequestPermission(context); + LaunchUtils.startColorPickerOrRequestPermission(context); } else { publishColorPickerTile(context, OnOffTileState.STATE_OFF); PreferenceUtils.setColorPickerActive(context, false); diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java index 9893487..b598694 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java +++ b/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java @@ -21,7 +21,7 @@ import android.content.Intent; import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.overlays.GridOverlay; +import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; import cyanogenmod.app.CMStatusBarManager; @@ -70,13 +70,11 @@ public static class ClickBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { int state = intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); if (state == OnOffTileState.STATE_OFF) { - publishGridTile(context, OnOffTileState.STATE_ON); - Intent newIntent = new Intent(context, GridOverlay.class); - context.startService(newIntent); - PreferenceUtils.setGridOverlayActive(context, true); + LaunchUtils.publishGridOverlayTile(context, OnOffTileState.STATE_ON); + LaunchUtils.launchGridOverlay(context); } else { - publishGridTile(context, OnOffTileState.STATE_OFF); - PreferenceUtils.setGridOverlayActive(context, false); + LaunchUtils.publishGridOverlayTile(context, OnOffTileState.STATE_OFF); + LaunchUtils.cancelGridOverlay(context); } } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java index 0e769be..104794c 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java +++ b/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java @@ -22,6 +22,7 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.overlays.MockOverlay; +import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; import cyanogenmod.app.CMStatusBarManager; @@ -70,13 +71,11 @@ public static class ClickBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { int state = intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); if (state == OnOffTileState.STATE_OFF) { - publishMockTile(context, OnOffTileState.STATE_ON); - Intent newIntent = new Intent(context, MockOverlay.class); - context.startService(newIntent); - PreferenceUtils.setMockOverlayActive(context, true); + LaunchUtils.publishMockOverlayTile(context, OnOffTileState.STATE_ON); + LaunchUtils.launchMockOverlay(context); } else { - publishMockTile(context, OnOffTileState.STATE_OFF); - PreferenceUtils.setMockOverlayActive(context, false); + LaunchUtils.publishMockOverlayTile(context, OnOffTileState.STATE_OFF); + LaunchUtils.cancelMockOverlay(context); } } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java index d77109c..c793255 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java @@ -24,6 +24,7 @@ import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.R; +import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.utils.LaunchUtils; @TargetApi(Build.VERSION_CODES.N) @@ -60,9 +61,11 @@ public void onClick() { super.onClick(); boolean isOn = ((DesignerToolsApplication) getApplicationContext()).getColorPickerOn(); if (isOn) { - LaunchUtils.cancelColorPickerOrUnpublishTile(this); + LaunchUtils.publishColorPickerTile(this, OnOffTileState.STATE_OFF); + LaunchUtils.cancelColorPickerOverlay(this); } else { - LaunchUtils.lauchColorPickerOrPublishTile(this, 0); + LaunchUtils.publishColorPickerTile(this, OnOffTileState.STATE_ON); + LaunchUtils.launchColorPickerOverlay(this); } updateTile(!isOn); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java index 18a1950..a48c0d1 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java @@ -61,9 +61,9 @@ public void onClick() { super.onClick(); boolean isOn = ((DesignerToolsApplication) getApplicationContext()).getGridOverlayOn(); if (isOn) { - LaunchUtils.cancelGridOverlayOrUnpublishTile(this); + LaunchUtils.cancelGridOverlay(this); } else { - LaunchUtils.lauchGridOverlayOrPublishTile(this, 0); + LaunchUtils.launchGridOverlay(this); } updateTile(!isOn); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java index 6dc8f8f..c9e9de9 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java @@ -78,6 +78,9 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } + private void isEnabled() { + } + private void enableFeature(boolean enable) { if (enable) { LaunchUtils.lauchColorPickerOrPublishTile(getContext(), diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java index a5eb0ed..52f849d 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java @@ -35,60 +35,109 @@ public static boolean isCyanogenMod(Context context) { return context.getPackageManager().hasSystemFeature("org.cyanogenmod.theme"); } + public static void publishGridOverlayTile(Context context, int state) { + GridQuickSettingsTile.publishGridTile(context, state); + } + + public static void launchGridOverlay(Context context) { + startOverlayActivity(context, StartOverlayActivity.GRID_OVERLAY); + } + public static void lauchGridOverlayOrPublishTile(Context context, int state) { if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - GridQuickSettingsTile.publishGridTile(context, state); + publishGridOverlayTile(context, state); } else { - startOverlayActivity(context, StartOverlayActivity.GRID_OVERLAY); + launchGridOverlay(context); } } + public static void unpublishGridOverlayTile(Context context) { + GridQuickSettingsTile.unpublishGridTile(context); + } + + public static void cancelGridOverlay(Context context) { + Intent newIntent = new Intent(context, GridOverlay.class); + context.stopService(newIntent); + PreferenceUtils.setGridOverlayActive(context, false); + PreferenceUtils.setGridQsTileEnabled(context, false); + } + public static void cancelGridOverlayOrUnpublishTile(Context context) { if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + unpublishGridOverlayTile(context); GridQuickSettingsTile.unpublishGridTile(context); } else { - Intent newIntent = new Intent(context, GridOverlay.class); - context.stopService(newIntent); - PreferenceUtils.setGridOverlayActive(context, false); - PreferenceUtils.setGridQsTileEnabled(context, false); + cancelGridOverlay(context); } } + public static void publishMockOverlayTile(Context context, int state) { + MockQuickSettingsTile.publishMockTile(context, state); + } + + public static void launchMockOverlay(Context context) { + startOverlayActivity(context, StartOverlayActivity.MOCK_OVERLAY); + } + public static void lauchMockPverlayOrPublishTile(Context context, int state) { if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - MockQuickSettingsTile.publishMockTile(context, state); + publishMockOverlayTile(context, state); } else { - startOverlayActivity(context, StartOverlayActivity.MOCK_OVERLAY); + launchMockOverlay(context); } } + public static void unpublishMockOverlayTile(Context context) { + MockQuickSettingsTile.unpublishMockTile(context); + } + + public static void cancelMockOverlay(Context context) { + Intent newIntent = new Intent(context, MockOverlay.class); + context.stopService(newIntent); + PreferenceUtils.setMockOverlayActive(context, false); + PreferenceUtils.setMockQsTileEnabled(context, false); + } + public static void cancelMockOverlayOrUnpublishTile(Context context) { if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - MockQuickSettingsTile.unpublishMockTile(context); + unpublishMockOverlayTile(context); } else { - Intent newIntent = new Intent(context, MockOverlay.class); - context.stopService(newIntent); - PreferenceUtils.setMockOverlayActive(context, false); - PreferenceUtils.setMockQsTileEnabled(context, false); + cancelMockOverlay(context); } } + public static void publishColorPickerTile(Context context, int state) { + ColorPickerQuickSettingsTile.publishColorPickerTile(context, state); + } + + public static void launchColorPickerOverlay(Context context) { + startOverlayActivity(context, StartOverlayActivity.COLOR_PICKER_OVERLAY); + } + public static void lauchColorPickerOrPublishTile(Context context, int state) { if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - ColorPickerQuickSettingsTile.publishColorPickerTile(context, state); + publishColorPickerTile(context, state); } else { - startOverlayActivity(context, StartOverlayActivity.COLOR_PICKER_OVERLAY); + launchColorPickerOverlay(context); } } + public static void unpublishColorPickerTile(Context context) { + ColorPickerQuickSettingsTile.unpublishColorPickerTile(context); + } + + public static void cancelColorPickerOverlay(Context context) { + Intent newIntent = new Intent(context, ColorPickerOverlay.class); + context.stopService(newIntent); + PreferenceUtils.setColorPickerActive(context, false); + PreferenceUtils.setColorPickerQsTileEnabled(context, false); + } + public static void cancelColorPickerOrUnpublishTile(Context context) { if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - ColorPickerQuickSettingsTile.unpublishColorPickerTile(context); + unpublishColorPickerTile(context); } else { - Intent newIntent = new Intent(context, ColorPickerOverlay.class); - context.stopService(newIntent); - PreferenceUtils.setColorPickerActive(context, false); - PreferenceUtils.setColorPickerQsTileEnabled(context, false); + cancelColorPickerOverlay(context); } } From 10d1106eb7e79ef203b6a7565e519f35ed37d09a Mon Sep 17 00:00:00 2001 From: d34d Date: Mon, 2 Jan 2017 10:06:45 -0800 Subject: [PATCH 02/42] Change string for grid description --- .gitignore | 1 + .idea/misc.xml | 2 +- app/build.gradle | 1 + app/src/main/res/values/strings.xml | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 00051f0..c4f839e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.iml +*.apk .gradle /local.properties /.idea/workspace.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d19981..fbb6828 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 0f9e34d..99fdef6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,6 +10,7 @@ android { targetSdkVersion 25 versionCode 2 versionName "2.0.0" + setProperty("archivesBaseName", "DesignerTools-$versionName") } buildTypes { release { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e95a3cc..685edb7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,7 +17,7 @@ Designer Tools Grid overlay - On-screen grids help you check your layouts for misaligned elements and inconsistent spacing across your app. Cycle between 8dp, 4dp text baseline, and a custom size of your choice. + On-screen grids help you check your layouts for misaligned elements and inconsistent spacing across your app. Use the default 8dp grid or a custom size of your choice. Mockup overlay Overlaying a mockup gives you a live preview of the screen layout as you’re working. From c9a17cf7663474265ebdb5651422131fba4644f6 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Thu, 12 Jan 2017 08:21:27 -0800 Subject: [PATCH 03/42] Fix thumb not being drawn on vertical seekbar In Marshmallow the enabled thumb was not being drawn due to a bug where the thumb is not being rotated and translated like the rest of the seekbar. This patch implements a bit of a hack to get the thumb to be displayed on devices running Android Marshmallow by manually rendering the enabled thumb. --- .idea/misc.xml | 2 +- .../designertools/widget/VerticalSeekBar.java | 31 +++++++++++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb6828..5d19981 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/src/main/java/org/cyanogenmod/designertools/widget/VerticalSeekBar.java b/app/src/main/java/org/cyanogenmod/designertools/widget/VerticalSeekBar.java index b0ff2fa..ab31b50 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/widget/VerticalSeekBar.java +++ b/app/src/main/java/org/cyanogenmod/designertools/widget/VerticalSeekBar.java @@ -5,6 +5,9 @@ import android.content.Context; import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.SeekBar; @@ -15,14 +18,14 @@ public VerticalSeekBar(Context context) { super(context); } - public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - public VerticalSeekBar(Context context, AttributeSet attrs) { super(context, attrs); } + public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(h, w, oldh, oldw); } @@ -34,10 +37,26 @@ protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpe } protected void onDraw(Canvas c) { - c.rotate(-90); + c.rotate(270); c.translate(-getHeight(), 0); - super.onDraw(c); + + // Work around for known bug with Marshmallow where the enabled thumb is not drawn + if (isEnabled() && Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { + drawThumb(c); + } + } + + void drawThumb(Canvas canvas) { + Drawable thumb = getThumb(); + if (thumb != null) { + Rect thumbBounds = thumb.getBounds(); + canvas.save(); + canvas.rotate(270, thumbBounds.exactCenterX(), thumbBounds.exactCenterY()); + canvas.translate(0, thumbBounds.height() / 3f); + thumb.draw(canvas); + canvas.restore(); + } } @Override From ac87d6ac3630572c771bb0c865e848ef5cdce369 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Thu, 19 Jan 2017 10:03:50 -0800 Subject: [PATCH 04/42] Clean up PreferenceUtils --- .../DesignerToolsApplication.java | 10 +- .../designertools/overlays/GridOverlay.java | 40 +-- .../designertools/overlays/MockOverlay.java | 11 +- .../qs/ColorPickerQuickSettingsTile.java | 12 +- .../qs/GridQuickSettingsTile.java | 6 +- .../qs/MockQuickSettingsTile.java | 7 +- .../designertools/receiver/BootReceiver.java | 14 +- .../service/ScreenshotListenerService.java | 10 +- .../ui/ColorPickerCardFragment.java | 4 +- .../ui/DualColorPickerDialog.java | 6 +- .../ui/GridOverlayCardFragment.java | 31 +- .../ui/MockupOverlayCardFragmnt.java | 8 +- .../ui/ScreenRecordRequestActivity.java | 4 +- .../ui/ScreenshotCardFragment.java | 11 +- .../ui/StartOverlayActivity.java | 11 +- .../designertools/utils/ColorUtils.java | 4 +- .../designertools/utils/LaunchUtils.java | 19 +- .../designertools/utils/MockupUtils.java | 10 +- .../designertools/utils/PreferenceUtils.java | 271 +++++++++--------- .../designertools/widget/DualColorPicker.java | 6 +- 20 files changed, 256 insertions(+), 239 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/DesignerToolsApplication.java b/app/src/main/java/org/cyanogenmod/designertools/DesignerToolsApplication.java index 111eee1..f447423 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/DesignerToolsApplication.java +++ b/app/src/main/java/org/cyanogenmod/designertools/DesignerToolsApplication.java @@ -19,7 +19,9 @@ import android.app.Application; import android.content.Intent; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; +import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; +import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; public class DesignerToolsApplication extends Application { @@ -49,7 +51,7 @@ public void setGridOverlayOn(boolean on) { } public boolean getGridOverlayOn() { - return mGridOverlayOn || PreferenceUtils.getGridQsTileEnabled(this, false); + return mGridOverlayOn || GridPreferences.getGridQsTileEnabled(this, false); } public void setMockOverlayOn(boolean on) { @@ -57,7 +59,7 @@ public void setMockOverlayOn(boolean on) { } public boolean getMockOverlayOn() { - return mMockOverlayOn || PreferenceUtils.getMockQsTileEnabled(this, false); + return mMockOverlayOn || MockPreferences.getMockQsTileEnabled(this, false); } public void setColorPickerOn(boolean on) { @@ -65,7 +67,7 @@ public void setColorPickerOn(boolean on) { } public boolean getColorPickerOn() { - return mColorPickerOn || PreferenceUtils.getColorPickerQsTileEnabled(this, false); + return mColorPickerOn || ColorPickerPreferences.getColorPickerQsTileEnabled(this, false); } public void setScreenshotOn(boolean on) { diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java index 3e87f81..e429c3c 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java @@ -43,6 +43,7 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.utils.ColorUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; public class GridOverlay extends Service { private static final int NOTIFICATION_ID = GridOverlay.class.hashCode(); @@ -218,18 +219,17 @@ public GridOverlayView(Context context) { mHorizontalMarkerRight = context.getDrawable(R.drawable.ic_marker_horiz_right); mVerticalMarker = context.getDrawable(R.drawable.ic_marker_vert); - SharedPreferences prefs = PreferenceUtils.getShardedPreferences(context); - mShowGrid = PreferenceUtils.getShowGrid(context, false); - mShowKeylines = PreferenceUtils.getShowKeylines(context, false); + mShowGrid = GridPreferences.getShowGrid(context, false); + mShowKeylines = GridPreferences.getShowKeylines(context, false); - boolean useCustom = PreferenceUtils.getUseCustomGridSize(getContext(), + boolean useCustom = GridPreferences.getUseCustomGridSize(getContext(), false); int defColumnSize = getResources().getInteger( R.integer.default_column_size); int defRowSize = getResources().getInteger(R.integer.default_row_size); - mColumnSize = mDensity * (!useCustom ? defColumnSize : PreferenceUtils + mColumnSize = mDensity * (!useCustom ? defColumnSize : GridPreferences .getGridColumnSize(getContext(), defColumnSize)); - mRowSize = mDensity * (!useCustom ? defRowSize : PreferenceUtils + mRowSize = mDensity * (!useCustom ? defRowSize : GridPreferences .getGridRowSize(getContext(), defRowSize)); mKeylineWidth = 1.5f * mDensity; } @@ -295,43 +295,43 @@ protected void onDetachedFromWindow() { @Override public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { - if (PreferenceUtils.KEY_SHOW_GRID.equals(key)) { + if (GridPreferences.KEY_SHOW_GRID.equals(key)) { boolean enabled = - prefs.getBoolean(PreferenceUtils.KEY_SHOW_GRID, false); + prefs.getBoolean(GridPreferences.KEY_SHOW_GRID, false); if (mShowGrid != enabled) { mShowGrid = enabled; invalidate(); } - } else if (PreferenceUtils.KEY_SHOW_KEYLINES.equals(key)) { + } else if (GridPreferences.KEY_SHOW_KEYLINES.equals(key)) { boolean enabled = - prefs.getBoolean(PreferenceUtils.KEY_SHOW_KEYLINES, false); + prefs.getBoolean(GridPreferences.KEY_SHOW_KEYLINES, false); if (enabled != mShowKeylines) { mShowKeylines = enabled; invalidate(); } - } else if (PreferenceUtils.KEY_GRID_COLUMN_SIZE.equals(key)) { - mColumnSize = mDensity * PreferenceUtils.getGridColumnSize(getContext(), + } else if (GridPreferences.KEY_GRID_COLUMN_SIZE.equals(key)) { + mColumnSize = mDensity * GridPreferences.getGridColumnSize(getContext(), getResources().getInteger(R.integer.default_column_size)); invalidate(); - } else if (PreferenceUtils.KEY_GRID_ROW_SIZE.equals(key)) { - mRowSize = mDensity * PreferenceUtils.getGridRowSize(getContext(), + } else if (GridPreferences.KEY_GRID_ROW_SIZE.equals(key)) { + mRowSize = mDensity * GridPreferences.getGridRowSize(getContext(), getResources().getInteger(R.integer.default_row_size)); invalidate(); - } else if (PreferenceUtils.KEY_GRID_LINE_COLOR.equals(key)) { + } else if (GridPreferences.KEY_GRID_LINE_COLOR.equals(key)) { mGridPaint.setColor(ColorUtils.getGridLineColor(getContext())); invalidate(); - } else if (PreferenceUtils.KEY_KEYLINE_COLOR.equals(key)) { + } else if (GridPreferences.KEY_KEYLINE_COLOR.equals(key)) { mKeylinePaint.setColor(ColorUtils.getKeylineColor(getContext())); invalidate(); - } else if (PreferenceUtils.KEY_USE_CUSTOM_GRID_SIZE.equals(key)) { - boolean useCustom = PreferenceUtils.getUseCustomGridSize(getContext(), + } else if (GridPreferences.KEY_USE_CUSTOM_GRID_SIZE.equals(key)) { + boolean useCustom = GridPreferences.getUseCustomGridSize(getContext(), false); int defColumnSize = getResources().getInteger( R.integer.default_column_size); int defRowSize = getResources().getInteger(R.integer.default_row_size); - mColumnSize = mDensity * (!useCustom ? defColumnSize : PreferenceUtils + mColumnSize = mDensity * (!useCustom ? defColumnSize : GridPreferences .getGridColumnSize(getContext(), defColumnSize)); - mRowSize = mDensity * (!useCustom ? defRowSize : PreferenceUtils + mRowSize = mDensity * (!useCustom ? defRowSize : GridPreferences .getGridRowSize(getContext(), defRowSize)); invalidate(); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java index 35836bc..13d9e2a 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java @@ -40,6 +40,7 @@ import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.utils.MockupUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; import java.io.File; @@ -174,7 +175,7 @@ protected void onAttachedToWindow() { SharedPreferences prefs = PreferenceUtils.getShardedPreferences(getContext()); prefs.registerOnSharedPreferenceChangeListener(mPreferenceChangeListener); setImageBitmap(getBitmapForOrientation(getResources().getConfiguration().orientation)); - setAlpha(PreferenceUtils.getMockOpacity(getContext(), 10) / 100f); + setAlpha(MockPreferences.getMockOpacity(getContext(), 10) / 100f); invalidate(); } @@ -202,13 +203,13 @@ private Bitmap getBitmapForOrientation(int orientation) { @Override public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { - if (PreferenceUtils.KEY_MOCKUP_OVERLAY_PORTRAIT.equals(key) || - PreferenceUtils.KEY_MOCKUP_OVERLAY_LANDSCAPE.equals(key)) { + if (MockPreferences.KEY_MOCKUP_OVERLAY_PORTRAIT.equals(key) || + MockPreferences.KEY_MOCKUP_OVERLAY_LANDSCAPE.equals(key)) { setImageBitmap(getBitmapForOrientation( getResources().getConfiguration().orientation)); invalidate(); - } else if (PreferenceUtils.KEY_MOCK_OPACITY.equals(key)) { - int opacity = PreferenceUtils.getMockOpacity(getContext(), 10); + } else if (MockPreferences.KEY_MOCK_OPACITY.equals(key)) { + int opacity = MockPreferences.getMockOpacity(getContext(), 10); setAlpha(opacity / 100f); invalidate(); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java index aed48d3..686e6aa 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java +++ b/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java @@ -25,7 +25,7 @@ import org.cyanogenmod.designertools.overlays.ColorPickerOverlay; import org.cyanogenmod.designertools.ui.ScreenRecordRequestActivity; import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; import org.cyanogenmod.designertools.R; import cyanogenmod.app.CMStatusBarManager; @@ -60,12 +60,12 @@ public static void publishColorPickerTile(Context context, int state) { .setIcon(iconResId) .build(); CMStatusBarManager.getInstance(context).publishTile(TAG, TILE_ID, tile); - PreferenceUtils.setColorPickerQsTileEnabled(context, true); + ColorPickerPreferences.setColorPickerQsTileEnabled(context, true); } public static void unpublishColorPickerTile(Context context) { CMStatusBarManager.getInstance(context).removeTile(TAG, TILE_ID); - PreferenceUtils.setColorPickerQsTileEnabled(context, false); + ColorPickerPreferences.setColorPickerQsTileEnabled(context, false); Intent intent = new Intent(ColorPickerQuickSettingsTile.ACTION_UNPUBLISH); context.sendBroadcast(intent); } @@ -73,7 +73,7 @@ public static void unpublishColorPickerTile(Context context) { public static class ClickBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - if (PreferenceUtils.getColorPickerQsTileEnabled(context, false)) { + if (ColorPickerPreferences.getColorPickerQsTileEnabled(context, false)) { int state = intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); if (state == OnOffTileState.STATE_OFF) { @@ -81,7 +81,7 @@ public void onReceive(Context context, Intent intent) { LaunchUtils.startColorPickerOrRequestPermission(context); } else { publishColorPickerTile(context, OnOffTileState.STATE_OFF); - PreferenceUtils.setColorPickerActive(context, false); + ColorPickerPreferences.setColorPickerActive(context, false); } } } @@ -92,7 +92,7 @@ private void startColorPickerOrRequestPermission(Context context) { if (app.getScreenRecordResultCode() == Activity.RESULT_OK && app.getScreenRecordResultData() != null) { Intent newIntent = new Intent(context, ColorPickerOverlay.class); context.startService(newIntent); - PreferenceUtils.setColorPickerActive(context, true); + ColorPickerPreferences.setColorPickerActive(context, true); } else { Intent intent = new Intent(context, ScreenRecordRequestActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java index b598694..11a7c93 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java +++ b/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java @@ -22,7 +22,7 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; import cyanogenmod.app.CMStatusBarManager; import cyanogenmod.app.CustomTile; @@ -55,12 +55,12 @@ public static void publishGridTile(Context context, int state) { .setIcon(iconResId) .build(); CMStatusBarManager.getInstance(context).publishTile(TAG, TILE_ID, tile); - PreferenceUtils.setGridQsTileEnabled(context, true); + GridPreferences.setGridQsTileEnabled(context, true); } public static void unpublishGridTile(Context context) { CMStatusBarManager.getInstance(context).removeTile(TAG, TILE_ID); - PreferenceUtils.setGridQsTileEnabled(context, false); + GridPreferences.setGridQsTileEnabled(context, false); Intent intent = new Intent(GridQuickSettingsTile.ACTION_UNPUBLISH); context.sendBroadcast(intent); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java index 104794c..1caa681 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java +++ b/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java @@ -21,9 +21,8 @@ import android.content.Intent; import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.overlays.MockOverlay; import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; import cyanogenmod.app.CMStatusBarManager; import cyanogenmod.app.CustomTile; @@ -56,12 +55,12 @@ public static void publishMockTile(Context context, int state) { .setIcon(iconResId) .build(); CMStatusBarManager.getInstance(context).publishTile(TAG, TILE_ID, tile); - PreferenceUtils.setMockQsTileEnabled(context, true); + MockPreferences.setMockQsTileEnabled(context, true); } public static void unpublishMockTile(Context context) { CMStatusBarManager.getInstance(context).removeTile(TAG, TILE_ID); - PreferenceUtils.setMockQsTileEnabled(context, false); + MockPreferences.setMockQsTileEnabled(context, false); Intent intent = new Intent(MockQuickSettingsTile.ACTION_UNPUBLISH); context.sendBroadcast(intent); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/receiver/BootReceiver.java b/app/src/main/java/org/cyanogenmod/designertools/receiver/BootReceiver.java index 3ef58d1..e47c1df 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/receiver/BootReceiver.java +++ b/app/src/main/java/org/cyanogenmod/designertools/receiver/BootReceiver.java @@ -33,19 +33,19 @@ public BootReceiver() { @Override public void onReceive(Context context, Intent intent) { final boolean isCm = LaunchUtils.isCyanogenMod(context); - if (PreferenceUtils.getGridQsTileEnabled(context, false)) { - PreferenceUtils.setGridOverlayActive(context, false); + if (PreferenceUtils.GridPreferences.getGridQsTileEnabled(context, false)) { + PreferenceUtils.GridPreferences.setGridOverlayActive(context, false); if (isCm) GridQuickSettingsTile.publishGridTile(context); } - if (PreferenceUtils.getMockQsTileEnabled(context, false)) { - PreferenceUtils.setMockOverlayActive(context, false); + if (PreferenceUtils.MockPreferences.getMockQsTileEnabled(context, false)) { + PreferenceUtils.MockPreferences.setMockOverlayActive(context, false); if (isCm) MockQuickSettingsTile.publishMockTile(context); } - if (PreferenceUtils.getColorPickerQsTileEnabled(context, false)) { - PreferenceUtils.setColorPickerActive(context, false); + if (PreferenceUtils.ColorPickerPreferences.getColorPickerQsTileEnabled(context, false)) { + PreferenceUtils.ColorPickerPreferences.setColorPickerActive(context, false); if (isCm) ColorPickerQuickSettingsTile.publishColorPickerTile(context); } - if (PreferenceUtils.getScreenshotInfoEnabled(context, false)) { + if (PreferenceUtils.ScreenshotPreferences.getScreenshotInfoEnabled(context, false)) { Intent newIntent = new Intent(context, ScreenshotListenerService.class); context.startService(newIntent); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java index 81d1be8..f9207f6 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java @@ -31,6 +31,7 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.ui.DesignerToolsActivity; import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.ScreenshotPreferences; import java.io.File; @@ -73,8 +74,8 @@ public void onDestroy() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (PreferenceUtils.KEY_SCREENSHOT_INFO.equals(key)) { - boolean enabled = PreferenceUtils.getScreenshotInfoEnabled(this, false); + if (ScreenshotPreferences.KEY_SCREENSHOT_INFO.equals(key)) { + boolean enabled = ScreenshotPreferences.getScreenshotInfoEnabled(this, false); if (!enabled) { stopSelf(); } @@ -106,11 +107,8 @@ private class ScreenShotObserver extends ContentObserver { private static final String SORT_ORDER = MediaStore.Images.Media.DATE_ADDED + " DESC"; private static final long DEFAULT_DETECT_WINDOW_SECONDS = 10; - private Handler mHandler; - - public ScreenShotObserver(Handler handler) { + ScreenShotObserver(Handler handler) { super(handler); - mHandler = handler; } @Override diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java index c9e9de9..cdd1a6b 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java @@ -27,7 +27,7 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; public class ColorPickerCardFragment extends DesignerToolCardFragment { private static final int REQUEST_OVERLAY_PERMISSION = 0x42; @@ -84,7 +84,7 @@ private void isEnabled() { private void enableFeature(boolean enable) { if (enable) { LaunchUtils.lauchColorPickerOrPublishTile(getContext(), - PreferenceUtils.getColorPickerActive(getContext(), false) + ColorPickerPreferences.getColorPickerActive(getContext(), false) ? OnOffTileState.STATE_ON : OnOffTileState.STATE_OFF); } else { diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java b/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java index b738423..413f194 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java @@ -29,7 +29,7 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.utils.ColorUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; import com.larswerkman.lobsterpicker.LobsterPicker; import com.larswerkman.lobsterpicker.sliders.LobsterOpacitySlider; import com.viewpagerindicator.CirclePageIndicator; @@ -113,9 +113,9 @@ public boolean onTouch(View v, MotionEvent event) { public void onClick(DialogInterface dialog, int which) { switch (which) { case AlertDialog.BUTTON_POSITIVE: - PreferenceUtils.setGridLineColor(getContext(), + GridPreferences.setGridLineColor(getContext(), mColorPickerViews[0].picker.getColor()); - PreferenceUtils.setKeylineColor(getContext(), + GridPreferences.setKeylineColor(getContext(), mColorPickerViews[1].picker.getColor()); break; case AlertDialog.BUTTON_NEGATIVE: diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java index a7ed36c..0721284 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java @@ -36,6 +36,7 @@ import org.cyanogenmod.designertools.utils.ColorUtils; import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; import org.cyanogenmod.designertools.widget.DualColorPicker; import org.cyanogenmod.designertools.widget.GridPreview; @@ -64,20 +65,20 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mIncludeKeylines = (CheckBox) v.findViewById(R.id.include_keylines); mIncudeCustomGrid = (CheckBox) v.findViewById(R.id.include_custom_grid_size); mColumnSizer = (SeekBar) v.findViewById(R.id.column_sizer); - mColumnSizer.setProgress((PreferenceUtils.getGridColumnSize(getContext(), 8) - 4) / 2); + mColumnSizer.setProgress((GridPreferences.getGridColumnSize(getContext(), 8) - 4) / 2); mRowSizer = (SeekBar) v.findViewById(R.id.row_sizer); - mRowSizer.setProgress((PreferenceUtils.getGridRowSize(getContext(), 8) - 4) / 2); + mRowSizer.setProgress((GridPreferences.getGridRowSize(getContext(), 8) - 4) / 2); mGridPreview = (GridPreview) v.findViewById(R.id.grid_preview); - mGridPreview.setColumnSize(PreferenceUtils.getGridColumnSize(getContext(), 8)); - mGridPreview.setRowSize(PreferenceUtils.getGridRowSize(getContext(), 8)); + mGridPreview.setColumnSize(GridPreferences.getGridColumnSize(getContext(), 8)); + mGridPreview.setRowSize(GridPreferences.getGridRowSize(getContext(), 8)); mColumnSizer.setOnSeekBarChangeListener(mSeekBarChangeListener); mRowSizer.setOnSeekBarChangeListener(mSeekBarChangeListener); - mIncludeKeylines.setChecked(PreferenceUtils.getShowKeylines(context, false)); + mIncludeKeylines.setChecked(GridPreferences.getShowKeylines(context, false)); mIncludeKeylines.setOnCheckedChangeListener(mCheckChangedListener); - setIncludeCustomGridLines(PreferenceUtils.getUseCustomGridSize(context, false)); + setIncludeCustomGridLines(GridPreferences.getUseCustomGridSize(context, false)); mIncudeCustomGrid.setOnCheckedChangeListener(mCheckChangedListener); mRowSizer.setOnTouchListener(new View.OnTouchListener() { @@ -134,7 +135,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked == getApplicationContext().getGridOverlayOn()) return; if (isChecked) { LaunchUtils.lauchGridOverlayOrPublishTile(getContext(), - PreferenceUtils.getGridOverlayActive(getContext(), false) + GridPreferences.getGridOverlayActive(getContext(), false) ? OnOffTileState.STATE_ON : OnOffTileState.STATE_OFF); } else { @@ -153,12 +154,12 @@ private void setIncludeCustomGridLines(boolean include) { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (buttonView == mIncludeKeylines) { - PreferenceUtils.setShowKeylines(getContext(), isChecked); + GridPreferences.setShowKeylines(getContext(), isChecked); } else if (buttonView == mIncudeCustomGrid){ - PreferenceUtils.setUseCustomGridSize(getContext(), isChecked); + GridPreferences.setUseCustomGridSize(getContext(), isChecked); if (isChecked) { - PreferenceUtils.setGridColumnSize(getContext(), mGridPreview.getColumnSize()); - PreferenceUtils.setGridRowSize(getContext(), mGridPreview.getRowSize()); + GridPreferences.setGridColumnSize(getContext(), mGridPreview.getColumnSize()); + GridPreferences.setGridRowSize(getContext(), mGridPreview.getRowSize()); } mColumnSizer.setEnabled(isChecked); mRowSizer.setEnabled(isChecked); @@ -172,10 +173,10 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int size = 4 + progress * 2; if (seekBar == mColumnSizer) { mGridPreview.setColumnSize(size); - PreferenceUtils.setGridColumnSize(getContext(), size); + GridPreferences.setGridColumnSize(getContext(), size); } else if (seekBar == mRowSizer) { mGridPreview.setRowSize(size); - PreferenceUtils.setGridRowSize(getContext(), size); + GridPreferences.setGridRowSize(getContext(), size); } } @@ -188,9 +189,9 @@ public void onStopTrackingTouch(SeekBar seekBar) {} @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (PreferenceUtils.KEY_GRID_LINE_COLOR.equals(key)) { + if (GridPreferences.KEY_GRID_LINE_COLOR.equals(key)) { mDualColorPicker.setPrimaryColor(ColorUtils.getGridLineColor(getContext())); - } else if(PreferenceUtils.KEY_KEYLINE_COLOR.equals(key)) { + } else if(GridPreferences.KEY_KEYLINE_COLOR.equals(key)) { mDualColorPicker.setSecondaryColor(ColorUtils.getKeylineColor(getContext())); } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java b/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java index eb32c12..fede207 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java @@ -36,7 +36,7 @@ import org.cyanogenmod.designertools.utils.ImageUtils; import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.MockupUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; import java.io.IOException; @@ -93,7 +93,7 @@ public void onClick(View v) { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int opacity = (progress + 1) *10; - PreferenceUtils.setMockOpacity(getContext(), opacity); + MockPreferences.setMockOpacity(getContext(), opacity); setOpacityLevel(opacity); } @@ -107,7 +107,7 @@ public void onStopTrackingTouch(SeekBar seekBar) { } }); - int opacity = PreferenceUtils.getMockOpacity(getContext(), 10); + int opacity = MockPreferences.getMockOpacity(getContext(), 10); setOpacityLevel(opacity); return base; @@ -123,7 +123,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked == getApplicationContext().getMockOverlayOn()) return; if (isChecked) { LaunchUtils.lauchMockPverlayOrPublishTile(getContext(), - PreferenceUtils.getMockOverlayActive(getContext(), false) + MockPreferences.getMockOverlayActive(getContext(), false) ? OnOffTileState.STATE_ON : OnOffTileState.STATE_OFF); } else { diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenRecordRequestActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenRecordRequestActivity.java index 25499f1..d1b49f0 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenRecordRequestActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenRecordRequestActivity.java @@ -22,7 +22,7 @@ import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.overlays.ColorPickerOverlay; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; public class ScreenRecordRequestActivity extends Activity { @Override @@ -39,7 +39,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { resultCode, data); Intent newIntent = new Intent(this, ColorPickerOverlay.class); this.startService(newIntent); - PreferenceUtils.setColorPickerActive(this, true); + ColorPickerPreferences.setColorPickerActive(this, true); } finish(); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java index d2f23cf..43f5016 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java @@ -27,7 +27,7 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.service.ScreenshotListenerService; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.ScreenshotPreferences; public class ScreenshotCardFragment extends DesignerToolCardFragment { @@ -41,7 +41,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, base.setBackgroundTintList(ColorStateList.valueOf( getResources().getColor(R.color.colorScreenshotCardTint))); - mEnabledSwitch.setChecked(PreferenceUtils.getScreenshotInfoEnabled(getContext(), false)); + mEnabledSwitch.setChecked(ScreenshotPreferences.getScreenshotInfoEnabled(getContext(), + false)); return base; } @@ -50,7 +51,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - PreferenceUtils.setScreenshotInfoEnabled(getContext(), true); + ScreenshotPreferences.setScreenshotInfoEnabled(getContext(), true); Intent newIntent = new Intent(getContext(), ScreenshotListenerService.class); getContext().startService(newIntent); mEnabledSwitch.setChecked(true); @@ -71,7 +72,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { if (getActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { - PreferenceUtils.setScreenshotInfoEnabled(getContext(), isChecked); + ScreenshotPreferences.setScreenshotInfoEnabled(getContext(), isChecked); Intent newIntent = new Intent(getContext(), ScreenshotListenerService.class); getContext().startService(newIntent); } else { @@ -79,7 +80,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 42); } } else { - PreferenceUtils.setScreenshotInfoEnabled(getContext(), false); + ScreenshotPreferences.setScreenshotInfoEnabled(getContext(), false); } } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java index c069098..7019dbb 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java @@ -9,7 +9,8 @@ import org.cyanogenmod.designertools.overlays.GridOverlay; import org.cyanogenmod.designertools.overlays.MockOverlay; import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; +import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; /** * Created by clark on 12/19/16. @@ -62,14 +63,14 @@ private void startOverlayService(int overlayType) { case GRID_OVERLAY: Intent newIntent = new Intent(this, GridOverlay.class); this.startService(newIntent); - PreferenceUtils.setGridOverlayActive(this, true); - PreferenceUtils.setGridQsTileEnabled(this, true); + GridPreferences.setGridOverlayActive(this, true); + GridPreferences.setGridQsTileEnabled(this, true); break; case MOCK_OVERLAY: newIntent = new Intent(this, MockOverlay.class); this.startService(newIntent); - PreferenceUtils.setMockOverlayActive(this, true); - PreferenceUtils.setMockQsTileEnabled(this, true); + MockPreferences.setMockOverlayActive(this, true); + MockPreferences.setMockQsTileEnabled(this, true); break; case COLOR_PICKER_OVERLAY: LaunchUtils.startColorPickerOrRequestPermission(this); diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/ColorUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/ColorUtils.java index 7bc2095..ab265dd 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/ColorUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/ColorUtils.java @@ -21,12 +21,12 @@ public class ColorUtils { public static int getGridLineColor(Context context) { - return PreferenceUtils.getGridLineColor(context, + return PreferenceUtils.GridPreferences.getGridLineColor(context, context.getColor(R.color.dualColorPickerDefaultPrimaryColor)); } public static int getKeylineColor(Context context) { - return PreferenceUtils.getKeylineColor(context, + return PreferenceUtils.GridPreferences.getKeylineColor(context, context.getColor(R.color.dualColorPickerDefaultSecondaryColor)); } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java index 52f849d..8cd8614 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java @@ -29,6 +29,9 @@ import org.cyanogenmod.designertools.qs.MockQuickSettingsTile; import org.cyanogenmod.designertools.ui.ScreenRecordRequestActivity; import org.cyanogenmod.designertools.ui.StartOverlayActivity; +import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; +import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; +import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; public class LaunchUtils { public static boolean isCyanogenMod(Context context) { @@ -58,8 +61,8 @@ public static void unpublishGridOverlayTile(Context context) { public static void cancelGridOverlay(Context context) { Intent newIntent = new Intent(context, GridOverlay.class); context.stopService(newIntent); - PreferenceUtils.setGridOverlayActive(context, false); - PreferenceUtils.setGridQsTileEnabled(context, false); + GridPreferences.setGridOverlayActive(context, false); + GridPreferences.setGridQsTileEnabled(context, false); } public static void cancelGridOverlayOrUnpublishTile(Context context) { @@ -94,8 +97,8 @@ public static void unpublishMockOverlayTile(Context context) { public static void cancelMockOverlay(Context context) { Intent newIntent = new Intent(context, MockOverlay.class); context.stopService(newIntent); - PreferenceUtils.setMockOverlayActive(context, false); - PreferenceUtils.setMockQsTileEnabled(context, false); + MockPreferences.setMockOverlayActive(context, false); + MockPreferences.setMockQsTileEnabled(context, false); } public static void cancelMockOverlayOrUnpublishTile(Context context) { @@ -129,8 +132,8 @@ public static void unpublishColorPickerTile(Context context) { public static void cancelColorPickerOverlay(Context context) { Intent newIntent = new Intent(context, ColorPickerOverlay.class); context.stopService(newIntent); - PreferenceUtils.setColorPickerActive(context, false); - PreferenceUtils.setColorPickerQsTileEnabled(context, false); + ColorPickerPreferences.setColorPickerActive(context, false); + ColorPickerPreferences.setColorPickerQsTileEnabled(context, false); } public static void cancelColorPickerOrUnpublishTile(Context context) { @@ -147,8 +150,8 @@ public static void startColorPickerOrRequestPermission(Context context) { if (app.getScreenRecordResultCode() == Activity.RESULT_OK && app.getScreenRecordResultData() != null) { Intent newIntent = new Intent(context, ColorPickerOverlay.class); context.startService(newIntent); - PreferenceUtils.setColorPickerActive(context, true); - PreferenceUtils.setColorPickerQsTileEnabled(context, true); + ColorPickerPreferences.setColorPickerActive(context, true); + ColorPickerPreferences.setColorPickerQsTileEnabled(context, true); } else { Intent intent = new Intent(context, ScreenRecordRequestActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/MockupUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/MockupUtils.java index bad7f66..18db970 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/MockupUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/MockupUtils.java @@ -19,6 +19,8 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; + import java.io.File; import java.io.IOException; @@ -57,18 +59,18 @@ private static void saveMockup(Context context, Bitmap bmp, String fileName) if (bmp != null) { ImageUtils.saveBitmap(bmp, path + File.separator + fileName); if (PORTRAIT_MOCKUP_FILENAME.equals(fileName)) { - PreferenceUtils.setPortraitMocupkOverlay(context, filePath); + MockPreferences.setPortraitMocupkOverlay(context, filePath); } else if (LANDSCAPE_MOCKUP_FILENAME.equals(fileName)) { - PreferenceUtils.setLandscapeMocupkOverlay(context, filePath); + MockPreferences.setLandscapeMocupkOverlay(context, filePath); } } else { if (PORTRAIT_MOCKUP_FILENAME.equals(fileName)) { if (new File(filePath).delete()) { - PreferenceUtils.setPortraitMocupkOverlay(context, ""); + MockPreferences.setPortraitMocupkOverlay(context, ""); } } else if (LANDSCAPE_MOCKUP_FILENAME.equals(fileName)) { if (new File(filePath).delete()) { - PreferenceUtils.setLandscapeMocupkOverlay(context, ""); + MockPreferences.setLandscapeMocupkOverlay(context, ""); } } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/PreferenceUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/PreferenceUtils.java index 6d316fa..ecac7e1 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/PreferenceUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/PreferenceUtils.java @@ -21,188 +21,197 @@ public class PreferenceUtils { private static final String PREFERENCES_FILE = "com.cyngn.designertools_preferences"; - public static final String KEY_GRID_QS_TILE = "grid_qs_tile"; - public static final String KEY_MOCK_QS_TILE = "mock_qs_tile"; - public static final String KEY_SCREENSHOT_QS_TILE = "screenshot_qs_tile"; - public static final String KEY_SHOW_GRID = "grid_increments"; - public static final String KEY_SHOW_KEYLINES = "keylines"; - public static final String KEY_SCREENSHOT_INFO = "screenshot_info"; - public static final String KEY_GRID_STEP_SIZE = "grid_step_size"; - public static final String KEY_MOCK_OPACITY = "mock_opacity"; - public static final String KEY_MOCKUP_OVERLAY_PORTRAIT = "mockup_overlay_portrait"; - public static final String KEY_MOCKUP_OVERLAY_LANDSCAPE = "mock_overlay_landscape"; - public static final String KEY_COLOR_PICKER_QS_TILE = "color_picker_qs_tile"; - public static final String KEY_USE_CUSTOM_GRID_SIZE = "use_custom_grid_size"; - public static final String KEY_GRID_COLUMN_SIZE = "grid_column_size"; - public static final String KEY_GRID_ROW_SIZE = "grid_row_size"; - public static final String KEY_GRID_LINE_COLOR = "grid_line_color"; - public static final String KEY_KEYLINE_COLOR = "keyline_color"; - public static final String KEY_GRID_OVERLAY_ACTIVE = "grid_overlay_active"; - public static final String KEY_MOCK_OVERLAY_ACTIVE = "mock_overlay_active"; - public static final String KEY_COLOR_PICKER_ACTIVE = "color_picker_active"; - public static SharedPreferences getShardedPreferences(Context context) { return context.getSharedPreferences(PREFERENCES_FILE, 0); } - public static void setGridQsTileEnabled(Context context, boolean enabled) { - putBoolean(context, KEY_GRID_QS_TILE, enabled); + private static void putBoolean(Context context, String key, boolean value) { + getShardedPreferences(context).edit().putBoolean(key, value).apply(); } - public static boolean getGridQsTileEnabled(Context context, boolean defValue) { - return getBoolean(context, KEY_GRID_QS_TILE, defValue); + private static boolean getBoolean(Context context, String key, boolean defValue) { + return getShardedPreferences(context).getBoolean(key, defValue); } - public static void setMockQsTileEnabled(Context context, boolean enabled) { - putBoolean(context, KEY_MOCK_QS_TILE, enabled); + private static void putInt(Context context, String key, int value) { + getShardedPreferences(context).edit().putInt(key, value).apply(); } - public static boolean getMockQsTileEnabled(Context context, boolean defValue) { - return getBoolean(context, KEY_MOCK_QS_TILE, defValue); + private static int getInt(Context context, String key, int defValue) { + return getShardedPreferences(context).getInt(key, defValue); } - public static void setColorPickerQsTileEnabled(Context context, boolean enabled) { - putBoolean(context, KEY_COLOR_PICKER_QS_TILE, enabled); + private static void putString(Context context, String key, String value) { + getShardedPreferences(context).edit().putString(key, value).apply(); } - public static boolean getColorPickerQsTileEnabled(Context context, boolean defValue) { - return getBoolean(context, KEY_COLOR_PICKER_QS_TILE, defValue); + private static String getString(Context context, String key, String defValue) { + return getShardedPreferences(context).getString(key, defValue); } - public static void setShowGrid(Context context, boolean show) { - putBoolean(context, KEY_SHOW_GRID, show); - } + public static class GridPreferences { + public static final String KEY_GRID_QS_TILE = "grid_qs_tile"; + public static final String KEY_SHOW_GRID = "grid_increments"; + public static final String KEY_SHOW_KEYLINES = "keylines"; + public static final String KEY_GRID_STEP_SIZE = "grid_step_size"; + public static final String KEY_USE_CUSTOM_GRID_SIZE = "use_custom_grid_size"; + public static final String KEY_GRID_COLUMN_SIZE = "grid_column_size"; + public static final String KEY_GRID_ROW_SIZE = "grid_row_size"; + public static final String KEY_GRID_LINE_COLOR = "grid_line_color"; + public static final String KEY_KEYLINE_COLOR = "keyline_color"; + public static final String KEY_GRID_OVERLAY_ACTIVE = "grid_overlay_active"; - public static boolean getShowGrid(Context context, boolean defValue) { - return getBoolean(context, KEY_SHOW_GRID, defValue); - } + public static void setGridQsTileEnabled(Context context, boolean enabled) { + putBoolean(context, KEY_GRID_QS_TILE, enabled); + } - public static void setShowKeylines(Context context, boolean show) { - putBoolean(context, KEY_SHOW_KEYLINES, show); - } + public static boolean getGridQsTileEnabled(Context context, boolean defValue) { + return getBoolean(context, KEY_GRID_QS_TILE, defValue); + } - public static boolean getShowKeylines(Context context, boolean defValue) { - return getBoolean(context, KEY_SHOW_KEYLINES, defValue); - } + public static void setShowGrid(Context context, boolean show) { + putBoolean(context, KEY_SHOW_GRID, show); + } - public static void setScreenshotInfoEnabled(Context context, boolean enabled) { - putBoolean(context, KEY_SCREENSHOT_INFO, enabled); - } + public static boolean getShowGrid(Context context, boolean defValue) { + return getBoolean(context, KEY_SHOW_GRID, defValue); + } - public static boolean getScreenshotInfoEnabled(Context context, boolean defValue) { - return getBoolean(context, KEY_SCREENSHOT_INFO, defValue); - } + public static void setShowKeylines(Context context, boolean show) { + putBoolean(context, KEY_SHOW_KEYLINES, show); + } - public static void setMockOpacity(Context context, int opacity) { - putInt(context, KEY_MOCK_OPACITY, opacity); - } + public static boolean getShowKeylines(Context context, boolean defValue) { + return getBoolean(context, KEY_SHOW_KEYLINES, defValue); + } - public static int getMockOpacity(Context context, int defValue) { - return getInt(context, KEY_MOCK_OPACITY, defValue); - } + public static void setUseCustomGridSize(Context context, boolean use) { + putBoolean(context, KEY_USE_CUSTOM_GRID_SIZE, use); + } - public static void setPortraitMocupkOverlay(Context context, String pathOrUri) { - putString(context, KEY_MOCKUP_OVERLAY_PORTRAIT, pathOrUri); - } + public static boolean getUseCustomGridSize(Context context, boolean defValue) { + return getBoolean(context, KEY_USE_CUSTOM_GRID_SIZE, defValue); + } - public static String getPortraitMockupOverlay(Context context, String defValue) { - return getString(context, KEY_MOCKUP_OVERLAY_PORTRAIT, defValue); - } + public static void setGridColumnSize(Context context, int stepSize) { + putInt(context, KEY_GRID_COLUMN_SIZE, stepSize); + } - public static void setLandscapeMocupkOverlay(Context context, String pathOrUri) { - putString(context, KEY_MOCKUP_OVERLAY_LANDSCAPE, pathOrUri); - } + public static int getGridColumnSize(Context context, int defValue) { + return getInt(context, KEY_GRID_COLUMN_SIZE, defValue); + } - public static String getLandscapeMockupOverlay(Context context, String defValue) { - return getString(context, KEY_MOCKUP_OVERLAY_LANDSCAPE, defValue); - } + public static void setGridRowSize(Context context, int stepSize) { + putInt(context, KEY_GRID_ROW_SIZE, stepSize); + } - public static void setUseCustomGridSize(Context context, boolean use) { - putBoolean(context, KEY_USE_CUSTOM_GRID_SIZE, use); - } + public static int getGridRowSize(Context context, int defValue) { + return getInt(context, KEY_GRID_ROW_SIZE, defValue); + } - public static boolean getUseCustomGridSize(Context context, boolean defValue) { - return getBoolean(context, KEY_USE_CUSTOM_GRID_SIZE, defValue); - } + public static void setGridLineColor(Context context, int color) { + putInt(context, KEY_GRID_LINE_COLOR, color); + } - public static void setGridColumnSize(Context context, int stepSize) { - putInt(context, KEY_GRID_COLUMN_SIZE, stepSize); - } + public static int getGridLineColor(Context context, int defValue) { + return getInt(context, KEY_GRID_LINE_COLOR, defValue); + } - public static int getGridColumnSize(Context context, int defValue) { - return getInt(context, KEY_GRID_COLUMN_SIZE, defValue); - } + public static void setKeylineColor(Context context, int color) { + putInt(context, KEY_KEYLINE_COLOR, color); + } - public static void setGridRowSize(Context context, int stepSize) { - putInt(context, KEY_GRID_ROW_SIZE, stepSize); - } + public static int getKeylineColor(Context context, int defValue) { + return getInt(context, KEY_KEYLINE_COLOR, defValue); + } - public static int getGridRowSize(Context context, int defValue) { - return getInt(context, KEY_GRID_ROW_SIZE, defValue); - } + public static void setGridOverlayActive(Context context, boolean active) { + putBoolean(context, KEY_GRID_OVERLAY_ACTIVE, active); + } - public static void setGridLineColor(Context context, int color) { - putInt(context, KEY_GRID_LINE_COLOR, color); + public static boolean getGridOverlayActive(Context context, boolean defValue) { + return getBoolean(context, KEY_GRID_OVERLAY_ACTIVE, defValue); + } } - public static int getGridLineColor(Context context, int defValue) { - return getInt(context, KEY_GRID_LINE_COLOR, defValue); - } + public static class MockPreferences { + public static final String KEY_MOCK_OPACITY = "mock_opacity"; + public static final String KEY_MOCKUP_OVERLAY_PORTRAIT = "mockup_overlay_portrait"; + public static final String KEY_MOCKUP_OVERLAY_LANDSCAPE = "mock_overlay_landscape"; + public static final String KEY_MOCK_OVERLAY_ACTIVE = "mock_overlay_active"; + public static final String KEY_MOCK_QS_TILE = "mock_qs_tile"; - public static void setKeylineColor(Context context, int color) { - putInt(context, KEY_KEYLINE_COLOR, color); - } + public static void setMockOpacity(Context context, int opacity) { + putInt(context, KEY_MOCK_OPACITY, opacity); + } - public static int getKeylineColor(Context context, int defValue) { - return getInt(context, KEY_KEYLINE_COLOR, defValue); - } + public static int getMockOpacity(Context context, int defValue) { + return getInt(context, KEY_MOCK_OPACITY, defValue); + } - public static void setGridOverlayActive(Context context, boolean active) { - putBoolean(context, KEY_GRID_OVERLAY_ACTIVE, active); - } + public static void setPortraitMocupkOverlay(Context context, String pathOrUri) { + putString(context, KEY_MOCKUP_OVERLAY_PORTRAIT, pathOrUri); + } - public static boolean getGridOverlayActive(Context context, boolean defValue) { - return getBoolean(context, KEY_GRID_OVERLAY_ACTIVE, defValue); - } + public static String getPortraitMockupOverlay(Context context, String defValue) { + return getString(context, KEY_MOCKUP_OVERLAY_PORTRAIT, defValue); + } - public static void setMockOverlayActive(Context context, boolean active) { - putBoolean(context, KEY_MOCK_OVERLAY_ACTIVE, active); - } + public static void setLandscapeMocupkOverlay(Context context, String pathOrUri) { + putString(context, KEY_MOCKUP_OVERLAY_LANDSCAPE, pathOrUri); + } - public static boolean getMockOverlayActive(Context context, boolean defValue) { - return getBoolean(context, KEY_MOCK_OVERLAY_ACTIVE, defValue); - } + public static String getLandscapeMockupOverlay(Context context, String defValue) { + return getString(context, KEY_MOCKUP_OVERLAY_LANDSCAPE, defValue); + } - public static void setColorPickerActive(Context context, boolean active) { - putBoolean(context, KEY_COLOR_PICKER_ACTIVE, active); - } + public static void setMockOverlayActive(Context context, boolean active) { + putBoolean(context, KEY_MOCK_OVERLAY_ACTIVE, active); + } - public static boolean getColorPickerActive(Context context, boolean defValue) { - return getBoolean(context, KEY_COLOR_PICKER_ACTIVE, defValue); - } + public static boolean getMockOverlayActive(Context context, boolean defValue) { + return getBoolean(context, KEY_MOCK_OVERLAY_ACTIVE, defValue); + } - private static void putBoolean(Context context, String key, boolean value) { - getShardedPreferences(context).edit().putBoolean(key, value).commit(); - } + public static void setMockQsTileEnabled(Context context, boolean enabled) { + putBoolean(context, KEY_MOCK_QS_TILE, enabled); + } - private static boolean getBoolean(Context context, String key, boolean defValue) { - return getShardedPreferences(context).getBoolean(key, defValue); + public static boolean getMockQsTileEnabled(Context context, boolean defValue) { + return getBoolean(context, KEY_MOCK_QS_TILE, defValue); + } } - private static void putInt(Context context, String key, int value) { - getShardedPreferences(context).edit().putInt(key, value).commit(); - } + public static class ColorPickerPreferences { + public static final String KEY_COLOR_PICKER_QS_TILE = "color_picker_qs_tile"; + public static final String KEY_COLOR_PICKER_ACTIVE = "color_picker_active"; - private static int getInt(Context context, String key, int defValue) { - return getShardedPreferences(context).getInt(key, defValue); - } + public static void setColorPickerQsTileEnabled(Context context, boolean enabled) { + putBoolean(context, KEY_COLOR_PICKER_QS_TILE, enabled); + } - private static void putString(Context context, String key, String value) { - getShardedPreferences(context).edit().putString(key, value).commit(); - } + public static boolean getColorPickerQsTileEnabled(Context context, boolean defValue) { + return getBoolean(context, KEY_COLOR_PICKER_QS_TILE, defValue); + } - private static String getString(Context context, String key, String defValue) { - return getShardedPreferences(context).getString(key, defValue); + public static void setColorPickerActive(Context context, boolean active) { + putBoolean(context, KEY_COLOR_PICKER_ACTIVE, active); + } + + public static boolean getColorPickerActive(Context context, boolean defValue) { + return getBoolean(context, KEY_COLOR_PICKER_ACTIVE, defValue); + } } + public static class ScreenshotPreferences { + public static final String KEY_SCREENSHOT_INFO = "screenshot_info"; + + public static void setScreenshotInfoEnabled(Context context, boolean enabled) { + putBoolean(context, KEY_SCREENSHOT_INFO, enabled); + } + + public static boolean getScreenshotInfoEnabled(Context context, boolean defValue) { + return getBoolean(context, KEY_SCREENSHOT_INFO, defValue); + } + } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java b/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java index 07f9cc3..121e22d 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java +++ b/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java @@ -13,7 +13,7 @@ import android.view.View; import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.utils.PreferenceUtils; +import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; public class DualColorPicker extends View { private static final float STROKE_WIDTH = 5f; @@ -40,10 +40,10 @@ public DualColorPicker(Context context, AttributeSet attrs, int defStyleAttr, in super(context, attrs, defStyleAttr, defStyleRes); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.DualColorPicker, 0, 0); int primaryColor = ta.getColor(R.styleable.DualColorPicker_primaryColor, - PreferenceUtils.getGridLineColor(context, getResources() + GridPreferences.getGridLineColor(context, getResources() .getColor(R.color.dualColorPickerDefaultPrimaryColor))); int secondaryColor = ta.getColor(R.styleable.DualColorPicker_primaryColor, - PreferenceUtils.getKeylineColor(context, getResources() + GridPreferences.getKeylineColor(context, getResources() .getColor(R.color.dualColorPickerDefaultSecondaryColor))); mPrimaryFillPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); From 7badb2f818a4f34e01f1def84e73328dc7f9ae51 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Thu, 26 Jan 2017 09:05:19 -0800 Subject: [PATCH 05/42] Add app shortcuts support --- app/src/main/AndroidManifest.xml | 7 ++ .../ui/AppShortcutsActivity.java | 64 +++++++++++++++++++ .../res/drawable/ic_shortcut_colorpicker.xml | 14 ++++ .../main/res/drawable/ic_shortcut_grid.xml | 14 ++++ .../main/res/drawable/ic_shortcut_mock.xml | 14 ++++ app/src/main/res/xml/app_shortcuts.xml | 33 ++++++++++ 6 files changed, 146 insertions(+) create mode 100644 app/src/main/java/org/cyanogenmod/designertools/ui/AppShortcutsActivity.java create mode 100644 app/src/main/res/drawable/ic_shortcut_colorpicker.xml create mode 100644 app/src/main/res/drawable/ic_shortcut_grid.xml create mode 100644 app/src/main/res/drawable/ic_shortcut_mock.xml create mode 100644 app/src/main/res/xml/app_shortcuts.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a39748..e057581 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,6 +23,8 @@ + + + diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/AppShortcutsActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/AppShortcutsActivity.java new file mode 100644 index 0000000..a89d4c4 --- /dev/null +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/AppShortcutsActivity.java @@ -0,0 +1,64 @@ +package org.cyanogenmod.designertools.ui; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import org.cyanogenmod.designertools.DesignerToolsApplication; +import org.cyanogenmod.designertools.utils.LaunchUtils; + +/** + * Created by clark on 12/19/16. + */ + +public class AppShortcutsActivity extends Activity { + private static final String ACTION_SHOW_GRID_OVERLAY = + "com.scheffsblend.designertools.action.SHOW_GRID_OVERLAY"; + private static final String ACTION_SHOW_MOCK_OVERLAY = + "com.scheffsblend.designertools.action.SHOW_MOCK_OVERLAY"; + private static final String ACTION_SHOW_COLOR_PICKER_OVERLAY = + "com.scheffsblend.designertools.action.SHOW_COLOR_PICKER_OVERLAY"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + final Intent intent = getIntent(); + final String action = intent.getAction(); + if (ACTION_SHOW_GRID_OVERLAY.equals(action)) { + toggleGridOverlay(); + } else if (ACTION_SHOW_MOCK_OVERLAY.equals(action)) { + toggleMockOverlay(); + } else if (ACTION_SHOW_COLOR_PICKER_OVERLAY.equals(action)) { + toggleColorPickerOverlay(); + } + finish(); + } + + private DesignerToolsApplication getDesignerToolsApplication() { + return (DesignerToolsApplication) getApplication(); + } + + private void toggleGridOverlay() { + if (getDesignerToolsApplication().getGridOverlayOn()) { + LaunchUtils.cancelGridOverlay(this); + } else { + LaunchUtils.launchGridOverlay(this); + } + } + + private void toggleMockOverlay() { + if (getDesignerToolsApplication().getMockOverlayOn()) { + LaunchUtils.cancelMockOverlay(this); + } else { + LaunchUtils.launchMockOverlay(this); + } + } + + private void toggleColorPickerOverlay() { + if (getDesignerToolsApplication().getColorPickerOn()) { + LaunchUtils.cancelColorPickerOverlay(this); + } else { + LaunchUtils.launchColorPickerOverlay(this); + } + } +} diff --git a/app/src/main/res/drawable/ic_shortcut_colorpicker.xml b/app/src/main/res/drawable/ic_shortcut_colorpicker.xml new file mode 100644 index 0000000..b421f2f --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_colorpicker.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_shortcut_grid.xml b/app/src/main/res/drawable/ic_shortcut_grid.xml new file mode 100644 index 0000000..917b744 --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_grid.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_shortcut_mock.xml b/app/src/main/res/drawable/ic_shortcut_mock.xml new file mode 100644 index 0000000..081d99f --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_mock.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/app_shortcuts.xml b/app/src/main/res/xml/app_shortcuts.xml new file mode 100644 index 0000000..a7cbb8e --- /dev/null +++ b/app/src/main/res/xml/app_shortcuts.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + \ No newline at end of file From f5de150895e5276787859fc7b39eade6fa1915b8 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Wed, 1 Feb 2017 10:02:01 -0800 Subject: [PATCH 06/42] Make mock overlay same size as device screen Sizing the overlay to the same size as the display allows mocks that contain a navigation bar to be scaled correctly. --- .../cyanogenmod/designertools/overlays/MockOverlay.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java index 13d9e2a..58607d2 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java @@ -28,6 +28,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.PixelFormat; +import android.graphics.Point; import android.os.IBinder; import android.view.View; import android.view.ViewGroup; @@ -85,15 +86,17 @@ public void onDestroy() { } private void setup() { + mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); + Point size = new Point(); + mWindowManager.getDefaultDisplay().getRealSize(size); mParams = new WindowManager.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, + size.x, size.y, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSPARENT); mOverlayView = new MockOverlayView(this); - mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); mWindowManager.addView(mOverlayView, mParams); IntentFilter filter = new IntentFilter(MockQuickSettingsTile.ACTION_TOGGLE_STATE); filter.addAction(MockQuickSettingsTile.ACTION_UNPUBLISH); From 73f05021d62ab552792dfb871fe08f2018da9323 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Wed, 1 Feb 2017 11:56:52 -0800 Subject: [PATCH 07/42] Use setImageAlpha instead of setAlpha --- .../designertools/overlays/MockOverlay.java | 25 ++----------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java index 58607d2..56a2d95 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java @@ -26,12 +26,10 @@ import android.content.SharedPreferences; import android.content.res.Configuration; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.PixelFormat; import android.graphics.Point; import android.os.IBinder; import android.view.View; -import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ImageView; @@ -43,18 +41,12 @@ import org.cyanogenmod.designertools.utils.PreferenceUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; -import java.io.File; - public class MockOverlay extends Service { private static final int NOTIFICATION_ID = MockOverlay.class.hashCode(); private static final String ACTION_HIDE_OVERLAY = "hide_mock_overlay"; private static final String ACTION_SHOW_OVERLAY = "show_mock_overlay"; - private static final String MOCK_OVERLAY_FILENAME = "mock_overlay.png"; - - private static Bitmap sOverlayImage; - private WindowManager mWindowManager; private MockOverlayView mOverlayView; private WindowManager.LayoutParams mParams; @@ -155,18 +147,6 @@ public void onReceive(Context context, Intent intent) { } }; - public static Bitmap getMockOverlayBitmap(Context context) { - if (sOverlayImage == null) { - File filesDir = context.getFilesDir(); - File mockOverlayFile = new File(filesDir, MOCK_OVERLAY_FILENAME); - if (mockOverlayFile.exists()) { - sOverlayImage = BitmapFactory.decodeFile(mockOverlayFile.getAbsolutePath()); - } - } - - return sOverlayImage; - } - static class MockOverlayView extends ImageView { public MockOverlayView(Context context) { super(context); @@ -178,7 +158,7 @@ protected void onAttachedToWindow() { SharedPreferences prefs = PreferenceUtils.getShardedPreferences(getContext()); prefs.registerOnSharedPreferenceChangeListener(mPreferenceChangeListener); setImageBitmap(getBitmapForOrientation(getResources().getConfiguration().orientation)); - setAlpha(MockPreferences.getMockOpacity(getContext(), 10) / 100f); + setImageAlpha(MockPreferences.getMockOpacity(getContext(), 10)); invalidate(); } @@ -212,8 +192,7 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, getResources().getConfiguration().orientation)); invalidate(); } else if (MockPreferences.KEY_MOCK_OPACITY.equals(key)) { - int opacity = MockPreferences.getMockOpacity(getContext(), 10); - setAlpha(opacity / 100f); + setImageAlpha(MockPreferences.getMockOpacity(getContext(), 10)); invalidate(); } } From c81ba05bbb662b86b3d14c584a8fa4528bbcf3db Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Wed, 1 Feb 2017 13:45:56 -0800 Subject: [PATCH 08/42] Verfify screenshot size before adding info If a screenshot does not match the display size we will not add the screenshot info to it. --- .../service/ScreenshotInfoService.java | 11 ++++++++++- .../service/ScreenshotListenerService.java | 16 +++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java index 92d689d..96a4f11 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java @@ -26,6 +26,7 @@ import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; +import android.view.Surface; import android.view.View; import android.view.WindowManager; import android.widget.TextView; @@ -192,13 +193,21 @@ public static String formatKernelVersion(String rawKernelVersion) { private void saveModifiedScreenshot(Bitmap screenshot, Bitmap infoPane, String filePath) throws FileNotFoundException { + WindowManager wm = getSystemService(WindowManager.class); + Point size = new Point(); + wm.getDefaultDisplay().getRealSize(size); + if (screenshot.getWidth() != size.x || screenshot.getHeight() != size.y) { + Log.d(TAG, "Not adding info, screenshot too large"); + return; + } + Bitmap newBmp = Bitmap.createBitmap(screenshot.getWidth() + infoPane.getWidth(), screenshot.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(newBmp); canvas.drawColor(getColor(R.color.screenshot_info_background_color)); canvas.drawBitmap(screenshot, 0, 0, null); - screenshot.recycle(); canvas.drawBitmap(infoPane, screenshot.getWidth(), 0, null); + screenshot.recycle(); infoPane.recycle(); newBmp.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(filePath)); newBmp.recycle(); diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java index f9207f6..2719c86 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java @@ -102,10 +102,10 @@ private class ScreenShotObserver extends ContentObserver { MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString(); private final String[] PROJECTION = new String[] { MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.DATA, - MediaStore.Images.Media.DATE_ADDED + MediaStore.Images.Media.DATE_TAKEN }; private static final String SORT_ORDER = MediaStore.Images.Media.DATE_ADDED + " DESC"; - private static final long DEFAULT_DETECT_WINDOW_SECONDS = 10; + private static final long DEFAULT_DETECT_WINDOW_MS = 1000; ScreenShotObserver(Handler handler) { super(handler); @@ -122,21 +122,15 @@ public void onChange(boolean selfChange, Uri uri) { String path = cursor.getString( cursor.getColumnIndex(MediaStore.Images.Media.DATA)); long dateAdded = cursor.getLong(cursor.getColumnIndex( - MediaStore.Images.Media.DATE_ADDED)); - long currentTime = System.currentTimeMillis() / 1000; - Log.d(TAG, "path: " + path + ", dateAdded: " + dateAdded + - ", currentTime: " + currentTime); + MediaStore.Images.Media.DATE_TAKEN)); + long currentTime = System.currentTimeMillis(); if (path.toLowerCase().contains("screenshot") && Math.abs(currentTime - dateAdded) <= - DEFAULT_DETECT_WINDOW_SECONDS) { + DEFAULT_DETECT_WINDOW_MS) { Intent intent = new Intent(ScreenshotListenerService.this, ScreenshotInfoService.class); intent.putExtra(ScreenshotInfoService.EXTRA_PATH, path); - final File file = new File(path); - while (!file.exists()) { - Thread.sleep(100); - } startService(intent); } } From 6ff77408b9748742372c64ef6984d3407f620697 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Wed, 1 Feb 2017 21:58:46 -0800 Subject: [PATCH 09/42] Add round icon for Android 7+ --- .../main/res/mipmap-hdpi-v25/ic_launcher.png | Bin 0 -> 23798 bytes .../main/res/mipmap-mdpi-v25/ic_launcher.png | Bin 0 -> 20601 bytes .../main/res/mipmap-xhdpi-v25/ic_launcher.png | Bin 0 -> 26470 bytes .../main/res/mipmap-xxhdpi-v25/ic_launcher.png | Bin 0 -> 33364 bytes .../main/res/mipmap-xxxhdpi-v25/ic_launcher.png | Bin 0 -> 41074 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/res/mipmap-hdpi-v25/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi-v25/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi-v25/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi-v25/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi-v25/ic_launcher.png diff --git a/app/src/main/res/mipmap-hdpi-v25/ic_launcher.png b/app/src/main/res/mipmap-hdpi-v25/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf42ea5193cd73d8136f22b11fafc3b8ff914ab GIT binary patch literal 23798 zcmeI42{e>#|M=I?kF5*Axnez1XynpX`fA9bNf9IHU#+U2*F8B4huIqb!@B18gw6USqAecA&6prYUX5&$xo)!lBatMs82poyA zLy7pfVsY94fP%6Q7LIU6d4lXv4rn(;?)los+#obkk^7XC0mJ~Sj&ek6`?;e`{0vPI ze$EJ4B)75>rGk$f&Veh+6Atomb#e2M^HJpf=2s5)`);!+H|U#+r?Vor>TW=gg@G|h z9pjDyNr^~<5n>Whkc_N|n3OD3T=F$OcJ%bb%8814dwYv`ONe0H9Yn=sWo1Pn;-cc>V4Mcn!`ICd?gMu7 z;Q8(Z??(gWfpAA-J<%99(5_#&9p=2JA~*MLpdX(<$K{Is5y;KsPj)zpqCRk}sF(;u z^mj%`#19+nd3Tp@mxe@$qFhj}C^t_JoSoQj?Qlp941SpYHk_;LZ!JAMHN9{n_>;(Q zEj>(qu_#d($^&!W9f8vH!d(f^?=IfM6NdT;cOR~B>c4e_b;NjLJRC9q0PsimKVtMm z+yBFb?DqVl8OjI!4`#bP-_5?Qsqa&*fTJ#_?v8?cV%$wJ7#F4Q%hecv^&oZi-Q_6* z5;TA#&~Cd!5>gQT)#&Ha`RNa(0rx~H;cO+rVq#!%DN}JVIZ0VLaS1R)N)7_q=Hp@eG?L8Fm!NPCpDI07XLwwH!T zgC)g~C@@@B8Va_9LhMm85F}JW%>Ek=1B1Qhe{-#YL7d;+LO9povkel1z`6gil;osP zlJ=4iC~DdL+|jsX2zS||vpW_f zE|?h7UIqabgM($EGPtooCG5bmQV$XA>aB$s)j#C@I_ugg}vCxShQW*iOP; zLIxo%EsKzr#833UH4#!^hzwX<(o{@rH`m~@7ewY;uK6FE2&sR6B7Ux9gd^O|0fkf& z#g7f&@V{y9;1UutP$cd!KuXKt=1v?pcXl#%(qMZO1R{o%MnIrY3HRc0Sr`5| zhd`bf(4NEcJE1*3{vWPWB+4EA?_`-hSNQ`I=zrOm|Kq&6zk22Sv>xnDe8uqnr2K2u zg0JfSUghl8$-7n9_w{*VcUSEmwEy>_23MEhZaL)kaL1RK`%S68nEz!r{^=c8SpMru z6A6`t*xR8{U>R|Q{cfeXTg{50z;@!&Quat$85v2tZ%6NLtUb9gL_Xwqwphh$*E&pFzyBzBuWW)`uwhWkI$doI_m1i?ihQt3ra}??SXZH`|dT~ z)4Rud_a;sbS0Ur7wQq@3NlZcXZ*9NoTkKZ4F6X~hvNGZj+(%Sw_vfFcd%J%%J^imu z_jdnk`qR?P4ehBU{%5pbn)g`k-f4bEX@YyYf>M%}l9G^85dF3JR|{jb56Z`NZt z+7~9g(g7|!iG9ffT>HX=S31CjC$TSifNNiv@Ja``@Feyn4{+@Z6JF^67oNnvaI zVZtjN;KGyGmps6=FHCr)16+6#`;rH^_Js+rbbt#_VqfwA*S;{}l@4&>N$g7=;Mx}^ zywU+KJc)hD16=#UgjYJig(tBud4OwQnD9ymxbP(QB@b}z3lm=H02iLbzT^R}ePO~Y z9pJ)~*q1!OwJ%I~r2|}e68n+|xb}q!uXKP5Phwy40N1`S;gt?>;YsXE{!3hxKi`>v za>KnS!5jBR1a;9f7~Ig&`Dn7FechO4)msv zg7$QQv2cv>btR)xn$jYl31i?u|FI{_rIp-%6Pa4E+J0|iXyfb9@Mi5j%@o-ByWEwq?ZctN1j}h0qyV7W z&@zSFqb2LFC2xzJGMV&S8tZJfj&CehaVSuMj?n79;sNQYKFt#aH#9%_{dyic$gNMpu3-aT|V}k0& zne3)Mk)$~XAg1q9ZTb%fIl0?yMdpNT`!*91F|)F$=2?WFDh%DUCWkQ`XSi`I6i7I@ zHrjJn@JMVrGfU%h73CA8U#3#|pJ7G<7fd@gj&O*xFR>a9DK3RPu1+-$d)n}PI{5X- zR+T%Di+C6pZtVRaUsb?`@iqN{xgv(xs(5PZYhp^0;g;3ZA{wNR473sbRiJQ{BCDqL zPSCDzGXdSIjP{|myiIBUj+eE191oYw)gBx+2c)zsP0JtZ^qzkhAvjkRw6Q(E!`T|w z8#6xMduf@*BJ~9~@eyN6++BXH$vtXg8`SF=YvfTXMQUsmr{t|k;A)Wd|G zCX?$O^F-@NN*#v^dYuxlh0#$qm*E!G4cm17YgX16S!jfRy9_Zg4BK63)_vDZyHUc< zQBF<>P@&5*-W(=O$)0s)XL-K9!m0VofR0CcP%Qy>&~|)K&GWKPx3!`YI!5cSqj)~c z>k1KPM_E?0)y7?IYj(GSv=O3C(C=v4<{LSsKNwX2^H=?jf5^ z%6OiS1H{1U(L(R*=z%!|LS21U?RkFeNx!ZVz8fjwsM`B3WGS%cX;j*5!mRUp;hQ`K zZE=?eU79%Pj zq+MSt{5;-r>ef^1FH8#{KpsO%Sw@trR2SrWAJ4ckhmUQfR1fN^RkV0y@tkb!(E6PB@shS<{8!kupA9#*GS1wfp;1j=MFzApYU8y z6XRK`@K0DOLasQdw9T0RnT<<@GBhp5g$USl<4QAm+(CaeH>2BQi z(aaduRQOiq5NVf}W%iqwM;fS?YUYQ|wW${&SEIwZtH)|S){^tAAw%hx!a}KuT?EL= ziEpd&4=#uNl>+!|?bnrJuk%ENnQti2vyPD|zbq$wky zIek-CG;_RuDxxeW#AlsFoM)IM@BTXla;{O7Aju!Rs0iSl-n-XpSC@h+J|O|zfIcCQ z_e0h~jPa&~+0g2FGu4cwBy1ZtwyA2{NKNfStc%iz<#E0VO4sKVjETYwBTW5}H6J1N z;R^Z9z(cSI!jnO;!gA#aUcS)_6=^{wY5egfHB&=Ftuf*RU)Bw(L>8S=KbFlLrliD8 zVo1aNd(_oIH#-$m)%ANLCMRtBMW_X~swQhPZWRz~8JDPM8&7J=2$~KKuAPZo^sDoK zXC|}t^kxP?18~3Vz38KA>w?T8rq-{3eAIP_X1cYMOyy`^tcnm(E_GxehyU7Gfw$E$ zK?-dlTA%afPNy}SBHnmFXoO-U+*^a(EZ7xZ2^HSQf5tg+*PPofve!I|<{5DlBkC1W!T*GPpHR zRKd&)v84Q^p4B1X6Wp#shANB#;+M_}AL>p>2=nq(4UrtnEEZc^;ncfB!16X;&^7oL zg91Djj%!a2az%QKnMOP3PI%7nN~x+JCu?lfAaT~0a|7wW`&Jv>;P{)pAO z_14Oa)WhNjtODd}yCSIW%h!h^byHC%F9TJyw77T$4SE|xgL%mPwd;(ShiIexh6^18 zlRLSq>8?mE8PkDk=DKz+M9*(7-8zp2_ye8BvfJXR->Wla}y~iMe2KOjS3c?XA_t z)#Ag@;@DRvHQ4c+9QW9miIU-cYv+astQFgsJ@pXq-=-0dRYdd3=T=; zD_W)|M<;0-fqm_hK~oQB)aPkTvwGign#zFZ5mTGn&oCn z=IwJ_CQx$Nc~rD|9>YT*1r@A-GAvViP*??PwQ_+Ia3#JLoYM4ceh1KA2Jb)IZgtqJ z{*YHOpzA!`@^Cr|F&@dO!W(U>Yjt5o?poEDRf@Cqr_o7W#@yx>RTiQgVh}H*YQ%_` zHmtQ>Fu$ZwJ~m9-LgBJ+K}tS5BL>#miA<%IDZ>2=F4$7@$?fGpI_{B&jy>+}nToc(V;A)f(YA40()kNK7GFHZhK$p>_&I#1EZ_)*-xp)t*wAqHpOl- zF61~rWsV+eyj|467fM;TGxG4_5~951Zo zqjRi!`71y<@B^(yB~^2|iXagmLtGgIe1qCF4Ecvh;BxNun{yilBA;qIWLZghMy?@j zZ*bBhc(|U2hw?s|V7QRbU9P{{nH(;>RMe!9l)=}Ts4tW&!5rt*00%50r>dv^cGxb_;(PiPK(ak#wYo*L9e~{roo&y0poOl<>i^&q3GQH>5Q4OT{D8!`a zbH0PXs{B12L=C(CoR*DMA;GdD&60+PVKyu4gHjQzhvC(*#@8nqV)@Fes-D)a96x^f`X(YLE`bY~@B8_%REF$f_7 zbSPEPhaXKpZf={w|6bJMVm7J`xUMv_B1g`JWh2W+g?NNm7A3&)2w(AK2e=6oe|g?- zTD>L_w55#gRotO|mR@-x*|6nuv=qgTgC)GgP=_}1D{rdyX|&m#vD!j3FF_me$zI_} zpBZkQrbA_Jz^oCrDN&oquBn$gAxr()0qe7cB_ECTf!KuT7u=)?hv5EY#LB=sn{2t` zn#(k7EuV8}8T3%vEHhVnS3kAXelQWlq_c*RLs3 zTFtsYDut>vtjW$;13IXH#BA57e5`|Y^CF|8=^~>du^&`K>pgZJgF0R3wMG0t%?QIS zPp~~RyP0_hAV{cfFsMdOJZLm4fI`@CO_uU1@}1Quso#m5d|&3QlA=n4 z+r@fT9jd!#ZM946Ss4oILWjWXCqs~jU}jbnfdU>=?-tWR@F-~}Y-5@}h(UgnX3%LJ)J-D}3;sr{`2CdryJ4Q?)c z?o{8Qu>#=YqN7^>C_9^;Kwn?U#+*;mT)tx8bYDL`jopcFAY}3(E?1;oR=*Lbu+uWuR+IJKpq$&mqrkFh^bMe!wQxeKsKks@ZHK!e5KXuR0s^&eR_Ny*FR-y61qG}>q&9XO7`Ys;@WiY-c0n|HxOtbm2GGmb@ zN=pdr>NM|We$Y0>cCT(ZAR0o|J;T8f=wqVa9)9Aq7lR)K1G+oYv=GeXL#Z1<8zW9? zZwWbjgl5Nw{_c6v(OF8)nk^UurCYiuy-G+py`W#Em|TfkuJUBBGosdeYw-&1I6KY6 zV9GCW40kJG049r}mY`0pIn0ySFmF>z8i~HuG?}j@lM7q2?Pt2vNS725uA&}d`$Y~` zZbO*ItZxUgsEpSwO2Dn5>cu; z!i$$y=e`Dx_^Otrut@cjU*sr6)QrB*b(kLOCOLfQ5TY&3rqRm^()FfT!&BKHpK>zE zg-c_)=yT1<^QWQ-!wGYUFDTZ4dsqYs z?)-4cvNCCX4CXGgD69BNt@D1(^B8jSiz1I<#>|n2ny6iT7RZE}ysTJd+d`A+QXuL1 z8Biljr8I$O9Lnnh!^`MkAK_p-86sm&Xy+#TaG{Yr`Yf1HthSIx>1raKvab)l-`Zn> zu5)na$ONm=o7~pX+}gQMRL6KP^A4R7vgy)`Nzm+rN$V5k&)V&5D{W1*TzYcSlmP0w zdJo&zRe8Hzk}Dfl5Q_*Pt0%fK^vU`(K&bBW+7~_f)p#13ZDZ8RJx^2;3u%p9f74sv z5qLAvPNYEKs-%kyr#nr~4a@FAejr_aH?Z!@dAjH8>5ju6k4PTS)lvW70_Qv!tAAF`ZFX4iY_dfd^_B8pUw z*Jhx&o1Nwj3k!m8cV3?Ds~;zMxIuVafS4>rjkX8C*T^R}FGzCpO*BDtsctayycR5j zIET3X2E>)skn7UyfOSKb&DRUmG?#96z9oG#IK*|)ruW#>(YnWhbJhT@!WcEk}Cctig3^}(@@+~iAeZ#qT!jit^5{cL(@Fo z7)eG_ilZk~J>3Kv!vNMrp-u%CuYDXz`QvsD)5ZI-ue&S9>Mu3c4~ahBYBy0PfE>Q@ zrd_!x5_;L(G+_FO@&$kYiS=A@b>zub<6@s1=7$Z74^>Wv!qkrxTWCDZOw1kN2+>>y zsf}TdskTzsnTuV&Y@r+i(A89lpnM0>w@8b%IzyH|dDE&OjE?EH?zyNd9t=@Y903~{ zw>i2Re2SihOiP*!g-F-67CT(Gw#jB59%g$jh`P^CmT)y}@*yC1WH4-kn>LN-;<8m_ zg88vY0fRh5YNygk&)7{X3Xo3o`3T^Rltxds398xq9wf|_?1c*x=~$Gz-A>^^P^op8 zN!wU<27uSIuaK!FQfqa--&d~!Dob18KJJ)n29}^sPa_%-Qh5#tEMjsJ2z_$RFf4_2 znJy!c`;(TPcoQF&_|&vVS8h31mol5 z0C()s*E0f7@t`#)n=b^_&UX%-mFaE0%*cnxV-!iGgM@{^2wR(`VfM_yDPpDEqelx! zWUfIN7em6Sp7ka7xvGbp(i-V$Os8mh8TD2z`qglgDoL{TUFS)=$%T)#7^OFxmZHIn z(f1tqFRyBNv$z6W0dg12&pz@C?5LeU`VU|8vPIXBa|w?2Lh3Bu-OZ;d_kaf|EGPig;2+)^UMshM zWyt^7c09-O*qrkHk55HcIDG;hlM1+lw?AKXJEi=!1v66QKX5yve0V~)kfnOco^^hoyCGX9+z;*k40H3?92I6Cxwa^RptDM{Y zi+XS8u1R6GixRG0&)SMS6s;0do5}l9;zc=^p{(iAi)enWn_Mp^)QCFN>&!Vg*r9$M zbF&>=`caF?feG)N@*jh-;s8F0ZObzK&6&60OI7Dz_J1ypRa$U}cvWnaS=p@LW+=I& zz3QEM+uufNuBV)LuAAJ@E@N;FxSlO&6sK4|)!Xsa1MTmre@6dwlm|`ldf$|rasj8l z-vj02D&-pYC4Hw>(&P~@WF0zez7%&%^!N8>q`5}+JSpJ4mt4V-_{2^patFEGS0Vhl zL2KlKYLThm;)iWTR@_(n8_# zHZ?}*1y^-2kdT`^vd(X1BRXf?Xsv#0YY9efRBJ?R2tHW@MB63;1j=q;>cJ=PO^){~ z@93>8eD&6Jr7NDdJR3Ht&Go5HzUnJsg9o7R(Ss|mu1l@OO&ZqUe^UO5q#g1es4GvA z;|m-k9MLVvOfI{XaxW&BhP2-Mp|#Lj0*CyUnTEyyEy*>KqZi59L@D(9oiY(G+c_~T zH^_MbGozdHFoPpDT?#04L;E(-=H0JktFuP>$!{i}pLy1osZSjKVes|F*Kk%8fJdV2 z?q#A6v)Iz<^=Ky$^=#;gXK5rb38(^sDl^kxV53b%g8UB*Jz3Uqi`No*0QIZK9d$kA k;i`*S#Ca??c8&td3qH)dI?Lf+UJd~0Xc}r1tJ#MBAJyo93;+NC literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi-v25/ic_launcher.png b/app/src/main/res/mipmap-mdpi-v25/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a0c510319982a8fe20581e0759c62b82cd593d GIT binary patch literal 20601 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 B!_xo& literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi-v25/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi-v25/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7bc888ea198658f0143b6a98aee50fb611160e GIT binary patch literal 33364 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi-v25/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi-v25/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2d32e53a9633f84c238dee703330f421611434e0 GIT binary patch literal 41074 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 LNkvXXu0mjf31+dt literal 0 HcmV?d00001 From e42fd5c8d28cd2fe691af76c4bf2797f69a2f054 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Thu, 2 Feb 2017 08:42:25 -0800 Subject: [PATCH 10/42] Bump version to 2.0.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 99fdef6..a251c01 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.scheffsblend.designertools" minSdkVersion 23 targetSdkVersion 25 - versionCode 2 - versionName "2.0.0" + versionCode 3 + versionName "2.0.1" setProperty("archivesBaseName", "DesignerTools-$versionName") } buildTypes { From 8b83f0218e9cf09709971a21dfb0f2a316e5734d Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Fri, 3 Feb 2017 10:23:20 -0800 Subject: [PATCH 11/42] Switch to round icon for all versions of Android --- .../main/res/mipmap-hdpi-v25/ic_launcher.png | Bin 23798 -> 0 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 24619 -> 23798 bytes .../main/res/mipmap-mdpi-v25/ic_launcher.png | Bin 20601 -> 0 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 22620 -> 20601 bytes .../main/res/mipmap-xhdpi-v25/ic_launcher.png | Bin 26470 -> 0 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 26661 -> 26470 bytes .../res/mipmap-xxhdpi-v25/ic_launcher.png | Bin 33364 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 31466 -> 33364 bytes .../res/mipmap-xxxhdpi-v25/ic_launcher.png | Bin 41074 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 36280 -> 41074 bytes 10 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/src/main/res/mipmap-hdpi-v25/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-mdpi-v25/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xhdpi-v25/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xxhdpi-v25/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi-v25/ic_launcher.png diff --git a/app/src/main/res/mipmap-hdpi-v25/ic_launcher.png b/app/src/main/res/mipmap-hdpi-v25/ic_launcher.png deleted file mode 100644 index dcf42ea5193cd73d8136f22b11fafc3b8ff914ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23798 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 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index ba6f34bfbda13cd2564731b77a02dc2ecfdc2049..dcf42ea5193cd73d8136f22b11fafc3b8ff914ab 100644 GIT binary patch delta 7450 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 bd4RHrv0gb+JS_d|MuFsIRHUmUKL-655(di& diff --git a/app/src/main/res/mipmap-mdpi-v25/ic_launcher.png b/app/src/main/res/mipmap-mdpi-v25/ic_launcher.png deleted file mode 100644 index c1a0c510319982a8fe20581e0759c62b82cd593d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20601 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 B!_xo& diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index db7029e4913eecdb1caef79879e1f23ed379e4ca..a3d789631125432f25cef7aec1e7efceb7287edc 100644 GIT binary patch delta 10143 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 TXpaBBfq~Ti(^jg1T1Ea3CbSq# delta 10323 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 diff --git a/app/src/main/res/mipmap-xxhdpi-v25/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi-v25/ic_launcher.png deleted file mode 100644 index 4b7bc888ea198658f0143b6a98aee50fb611160e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33364 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 17d58e64c4e76e214498f6244bd8b7621df5c19d..4b7bc888ea198658f0143b6a98aee50fb611160e 100644 GIT binary patch delta 17147 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 LNkvXXu0mjf31+dt diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index b286b4b151a7af4570b38f0aba1250b722bb0dce..2d32e53a9633f84c238dee703330f421611434e0 100644 GIT binary patch delta 24860 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 Date: Sat, 4 Feb 2017 09:19:48 -0800 Subject: [PATCH 12/42] Bump version to 2.1.0 for new feature added --- .idea/misc.xml | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d19981..fbb6828 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index a251c01..ec94139 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { minSdkVersion 23 targetSdkVersion 25 versionCode 3 - versionName "2.0.1" + versionName "2.1.0" setProperty("archivesBaseName", "DesignerTools-$versionName") } buildTypes { From 20c57efda2620615ad706879fb0ee98939580144 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Fri, 17 Feb 2017 10:03:46 -0800 Subject: [PATCH 13/42] Fade grid and mock overlays in/out --- .../designertools/overlays/GridOverlay.java | 9 +++- .../designertools/overlays/MockOverlay.java | 47 ++++++++++++++++--- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java index e429c3c..f62bc51 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java @@ -71,8 +71,13 @@ public void onCreate() { public void onDestroy() { super.onDestroy(); if (mOverlayView != null) { - removeViewIfAttached(mOverlayView); - mOverlayView = null; + hideOverlay(new Runnable() { + @Override + public void run() { + removeViewIfAttached(mOverlayView); + mOverlayView = null; + } + }); } if (mReceiver != null) { unregisterReceiver(mReceiver); diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java index 56a2d95..cd77ae6 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java @@ -30,6 +30,7 @@ import android.graphics.Point; import android.os.IBinder; import android.view.View; +import android.view.ViewTreeObserver; import android.view.WindowManager; import android.widget.ImageView; @@ -67,8 +68,13 @@ public void onCreate() { public void onDestroy() { super.onDestroy(); if (mOverlayView != null) { - removeViewIfAttached(mOverlayView); - mOverlayView = null; + hideOverlay(new Runnable() { + @Override + public void run() { + removeViewIfAttached(mOverlayView); + mOverlayView = null; + } + }); } if (mReceiver != null) { unregisterReceiver(mReceiver); @@ -89,7 +95,16 @@ private void setup() { WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSPARENT); mOverlayView = new MockOverlayView(this); + mOverlayView.setAlpha(0f); mWindowManager.addView(mOverlayView, mParams); + mOverlayView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + mOverlayView.animate().alpha(1f); + mOverlayView.getViewTreeObserver().removeOnPreDrawListener(this); + return false; + } + }); IntentFilter filter = new IntentFilter(MockQuickSettingsTile.ACTION_TOGGLE_STATE); filter.addAction(MockQuickSettingsTile.ACTION_UNPUBLISH); filter.addAction(ACTION_HIDE_OVERLAY); @@ -138,15 +153,35 @@ public void onReceive(Context context, Intent intent) { stopSelf(); } } else if (ACTION_HIDE_OVERLAY.equals(action)) { - removeViewIfAttached(mOverlayView); - updateNotification(false); + hideOverlay(new Runnable() { + @Override + public void run() { + updateNotification(false); + } + }); } else if (ACTION_SHOW_OVERLAY.equals(action)) { - mWindowManager.addView(mOverlayView, mParams); - updateNotification(true); + showOverlay(); } } }; + private void showOverlay() { + mWindowManager.addView(mOverlayView, mParams); + updateNotification(true); + mOverlayView.animate().alpha(1f); + } + + private void hideOverlay(final Runnable endAction) { + mOverlayView.animate().alpha(0f).withEndAction(new Runnable() { + @Override + public void run() { + mOverlayView.setAlpha(0f); + removeViewIfAttached(mOverlayView); + if (endAction != null) endAction.run(); + } + }); + } + static class MockOverlayView extends ImageView { public MockOverlayView(Context context) { super(context); From ffee1a6cbdd67820beb6770fb290715c26617735 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Tue, 21 Feb 2017 09:23:02 -0800 Subject: [PATCH 14/42] Animate color picker in/out --- .../overlays/ColorPickerOverlay.java | 174 ++++++++++++++++-- 1 file changed, 159 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java index 93a2428..ba8e426 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java @@ -15,6 +15,9 @@ */ package org.cyanogenmod.designertools.overlays; +import android.animation.Animator; +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; @@ -39,11 +42,14 @@ import android.media.projection.MediaProjectionManager; import android.os.Handler; import android.os.IBinder; +import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; +import android.view.ViewTreeObserver; import android.view.WindowManager; +import android.view.animation.AccelerateDecelerateInterpolator; import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.qs.ColorPickerQuickSettingsTile; @@ -88,6 +94,8 @@ public class ColorPickerOverlay extends Service { private final Object mScreenCaptureLock = new Object(); + private boolean mAnimating = false; + @Override public IBinder onBind(Intent intent) { return null; @@ -117,12 +125,17 @@ public void onDestroy() { mImageReader = null; } if (mMagnifierView != null) { - removeViewIfAttached(mMagnifierView); - mMagnifierView = null; - } - if (mMagnifierNodeView != null) { - removeViewIfAttached(mMagnifierNodeView); - mMagnifierNodeView = null; + animateColorPickerOut(new Runnable() { + @Override + public void run() { + removeViewIfAttached(mMagnifierView); + mMagnifierView = null; + if (mMagnifierNodeView != null) { + removeViewIfAttached(mMagnifierNodeView); + mMagnifierNodeView = null; + } + } + }); } ((DesignerToolsApplication) getApplicationContext()).setColorPickerOn(false); } @@ -171,13 +184,21 @@ private void setup() { mNodeParams.y = y - nodeViewSize / 2; mMagnifierParams.x = x - magnifierWidth / 2; - mMagnifierParams.y = mNodeParams.y - magnifierHeight; + mMagnifierParams.y = mNodeParams.y - (magnifierHeight + nodeViewSize / 2); mMagnifierView = (MagnifierView) View.inflate(this, R.layout.color_picker_magnifier, null); mMagnifierView.setOnTouchListener(mDampenedOnTouchListener); mMagnifierNodeView = new MagnifierNodeView(this); mMagnifierNodeView.setOnTouchListener(mOnTouchListener); addOverlayViewsIfDetached(); + mMagnifierView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + animateColorPickerIn(); + mMagnifierView.getViewTreeObserver().removeOnPreDrawListener(this); + return false; + } + }); mPreviewSampleWidth = res.getInteger(R.integer.color_picker_sample_width); mPreviewSampleHeight = res.getInteger(R.integer.color_picker_sample_height); @@ -209,12 +230,129 @@ private void removeOverlayViewsIfAttached() { } private void addOverlayViewsIfDetached () { - if (mMagnifierView != null && !mMagnifierView.isAttachedToWindow()) { - mWindowManager.addView(mMagnifierView, mMagnifierParams); - } if (mMagnifierNodeView != null && !mMagnifierNodeView.isAttachedToWindow()) { mWindowManager.addView(mMagnifierNodeView, mNodeParams); } + if (mMagnifierView != null && !mMagnifierView.isAttachedToWindow()) { + mWindowManager.addView(mMagnifierView, mMagnifierParams); + } + } + + private void animateColorPickerIn() { + mMagnifierView.setScaleX(0); + mMagnifierView.setScaleY(0); + mMagnifierNodeView.setVisibility(View.GONE); + + final int startX = mMagnifierParams.x + (mMagnifierParams.width - mNodeParams.width) / 2; + final int startY = mMagnifierParams.y + (mMagnifierParams.height - mNodeParams.height) / 2; + final int endX = mNodeParams.x; + final int endY = mNodeParams.y; + mNodeParams.x = startX; + mNodeParams.y = startY; + mWindowManager.updateViewLayout(mMagnifierNodeView, mNodeParams); + final ValueAnimator animator = ObjectAnimator.ofFloat(null, "", 0f, 1f); + animator.setDuration(200); + animator.setInterpolator(new FastOutSlowInInterpolator()); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float fraction = valueAnimator.getAnimatedFraction(); + mNodeParams.x = startX + (int) (fraction * (endX - startX)); + mNodeParams.y = startY + (int) (fraction * (endY - startY)); + mWindowManager.updateViewLayout(mMagnifierNodeView, mNodeParams); + } + }); + animator.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animator) { + mAnimating = true; + mMagnifierNodeView.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationEnd(Animator animator) { + mAnimating = false; + } + + @Override + public void onAnimationCancel(Animator animator) { + } + + @Override + public void onAnimationRepeat(Animator animator) { + } + }); + + mMagnifierView.animate() + .scaleX(1f) + .scaleY(1f) + .setInterpolator(new FastOutSlowInInterpolator()) + .withEndAction(new Runnable() { + @Override + public void run() { + animator.start(); + } + }); + + } + + private void animateColorPickerOut(final Runnable endAction) { + final int endX = mMagnifierParams.x + (mMagnifierParams.width - mNodeParams.width) / 2; + final int endY = mMagnifierParams.y + (mMagnifierParams.height - mNodeParams.height) / 2; + final int startX = mNodeParams.x; + final int startY = mNodeParams.y; + mNodeParams.x = startX; + mNodeParams.y = startY; + mWindowManager.updateViewLayout(mMagnifierNodeView, mNodeParams); + final ValueAnimator animator = ObjectAnimator.ofFloat(null, "", 0f, 1f); + animator.setDuration(200); + animator.setInterpolator(new FastOutSlowInInterpolator()); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float fraction = valueAnimator.getAnimatedFraction(); + mNodeParams.x = startX + (int) (fraction * (endX - startX)); + mNodeParams.y = startY + (int) (fraction * (endY - startY)); + mWindowManager.updateViewLayout(mMagnifierNodeView, mNodeParams); + } + }); + animator.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animator) { + mAnimating = true; + mMagnifierNodeView.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationEnd(Animator animator) { + mAnimating = false; + mMagnifierNodeView.setVisibility(View.GONE); + mNodeParams.x = startX; + mNodeParams.y = startY; + mMagnifierView.animate() + .scaleX(0) + .scaleY(0) + .setInterpolator(new FastOutSlowInInterpolator()) + .withEndAction(new Runnable() { + @Override + public void run() { + if (endAction != null) { + endAction.run(); + } + } + }); + + } + + @Override + public void onAnimationCancel(Animator animator) { + } + + @Override + public void onAnimationRepeat(Animator animator) { + } + }); + animator.start(); } public Bitmap getScreenBitmapRegion(Image image, Rect region) { @@ -327,10 +465,10 @@ public void onImageAvailable(ImageReader reader) { synchronized (mScreenCaptureLock) { Image newImage = reader.acquireNextImage(); if (newImage != null) { - if (mMagnifierView != null) { + if (!mAnimating && mMagnifierView != null) { mMagnifierView.setPixels(getScreenBitmapRegion(newImage, mPreviewArea)); - newImage.close(); } + newImage.close(); } } } @@ -349,13 +487,19 @@ public void onReceive(Context context, Intent intent) { stopSelf(); } } else if (ACTION_HIDE_PICKER.equals(action)) { - removeOverlayViewsIfAttached(); - teardownMediaProjection(); - updateNotification(false); + animateColorPickerOut(new Runnable() { + @Override + public void run() { + removeOverlayViewsIfAttached(); + teardownMediaProjection(); + updateNotification(false); + } + }); } else if (ACTION_SHOW_PICKER.equals(action)) { addOverlayViewsIfDetached(); setupMediaProjection(); updateNotification(true); + animateColorPickerIn(); } } }; From 228e6e6722a9fc496c86e8726921613ec617216d Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Sun, 29 Dec 2019 13:12:51 -0800 Subject: [PATCH 15/42] Update probject for Android Studio 3.5.3 --- .idea/caches/build_file_checksums.ser | Bin 0 -> 534 bytes .idea/caches/gradle_models.ser | Bin 0 -> 128890 bytes .idea/codeStyles/Project.xml | 116 +++++++++++++++++++++++ .idea/gradle.xml | 6 +- .idea/misc.xml | 34 +++---- app/build.gradle | 22 ++--- build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 12 +-- 8 files changed, 159 insertions(+), 35 deletions(-) create mode 100644 .idea/caches/build_file_checksums.ser create mode 100644 .idea/caches/gradle_models.ser create mode 100644 .idea/codeStyles/Project.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000000000000000000000000000000000000..00d52af2d192d10d7228b1e5c4a44ae8d8697420 GIT binary patch literal 534 zcmZ4UmVvdnh`~NNKUXg?FQq6yGexf?KR>5fFEb@IQ7^qHF(oHeub?PDD>b=9F91S2 zm1gFoxMk*~I%lLNXBU^|7Q2L-Ts|(GuF1r}uGBYr_F>vMNC#JY1CYR(Fc`|U8WE7 literal 0 HcmV?d00001 diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser new file mode 100644 index 0000000000000000000000000000000000000000..78c27ec1271c5edbc7a4efc8497e2fd7051fb2bc GIT binary patch literal 128890 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 + + + + + + +

+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+ + + + +
\ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 0e23f8e..6e5d2ea 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,7 +3,10 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb6828..bb89e42 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,43 +1,45 @@ - - - - - - - - - - - - - - + diff --git a/app/build.gradle b/app/build.gradle index ec94139..794a0bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,30 +1,30 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion "25.0.1" + compileSdkVersion 28 + buildToolsVersion "28.0.3" defaultConfig { applicationId "com.scheffsblend.designertools" - minSdkVersion 23 - targetSdkVersion 25 + minSdkVersion 24 + targetSdkVersion 28 versionCode 3 versionName "2.1.0" setProperty("archivesBaseName", "DesignerTools-$versionName") } buildTypes { release { - minifyEnabled false + minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.1.0' - compile 'org.cyanogenmod:platform.sdk:6.0' - compile 'com.larswerkman:lobsterpicker:1.0.1' - compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' + implementation fileTree(include: ['*.jar'], dir: 'libs') + testImplementation 'junit:junit:4.12' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'org.cyanogenmod:platform.sdk:6.0' + implementation 'com.larswerkman:lobsterpicker:1.0.1' + implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' } diff --git a/build.gradle b/build.gradle index cfce2ca..d011437 100644 --- a/build.gradle +++ b/build.gradle @@ -2,10 +2,11 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:3.5.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,6 +16,7 @@ buildscript { allprojects { repositories { jcenter() + google() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ec67e15..827315e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Aug 19 15:01:13 PDT 2016 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +#Sun Dec 29 12:58:57 PST 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip From 14f7914f62f6442ffddd40249c8354c159c1f99f Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Sun, 29 Dec 2019 21:02:39 -0800 Subject: [PATCH 16/42] Add support for Android 10 and lower --- app/src/main/AndroidManifest.xml | 1 + .../overlays/ColorPickerOverlay.java | 52 ++++++++++------- .../designertools/overlays/GridOverlay.java | 42 ++++++++------ .../designertools/overlays/MockOverlay.java | 34 ++++++----- .../service/ScreenshotListenerService.java | 47 +++++++++------ .../ui/GridOverlayCardFragment.java | 1 - .../ui/MockupOverlayCardFragmnt.java | 1 - .../ui/ScreenshotCardFragment.java | 2 - .../utils/NotificationUtils.java | 58 +++++++++++++++++++ .../designertools/utils/ViewUtils.java | 28 +++++++++ .../designertools/widget/DualColorPicker.java | 8 ++- .../res/layout/mockup_overlay_content.xml | 2 +- 12 files changed, 197 insertions(+), 79 deletions(-) create mode 100644 app/src/main/java/org/cyanogenmod/designertools/utils/NotificationUtils.java create mode 100644 app/src/main/java/org/cyanogenmod/designertools/utils/ViewUtils.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e057581..d027e05 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ + = Build.VERSION_CODES.O) { + NotificationManager nm = context.getSystemService(NotificationManager.class); + NotificationChannel channel = nm.getNotificationChannel(channelId); + if (channel == null) { + channel = new NotificationChannel(channelId, channelId, + NotificationManager.IMPORTANCE_NONE); + channel.enableLights(false); + nm.createNotificationChannel(channel); + } + } + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId); + builder.setPriority(Notification.PRIORITY_MIN) + .setSmallIcon(icon) + .setContentTitle(title) + .setContentText(contentText) + .setStyle(new NotificationCompat.BigTextStyle().bigText(contentText)) + .setContentIntent(contentIntent); + + return builder.build(); + } +} diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/ViewUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/ViewUtils.java new file mode 100644 index 0000000..94326a7 --- /dev/null +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/ViewUtils.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2019 Scheff's Blend + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.cyanogenmod.designertools.utils; + +import android.os.Build; +import android.view.WindowManager; + +public class ViewUtils { + + public static int getWindowType() { + return (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N_MR1) + ? WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY + : WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } +} diff --git a/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java b/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java index 121e22d..0b2dd08 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java +++ b/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java @@ -75,18 +75,22 @@ protected void onDraw(Canvas canvas) { canvas.drawColor(0); // draw the left half - canvas.clipRect(0, 0, widthDiv2, height, Region.Op.REPLACE); + canvas.save(); + canvas.clipRect(0, 0, widthDiv2, height); canvas.drawCircle(widthDiv2, heightDiv2, radius, mPrimaryFillPaint); canvas.drawCircle(widthDiv2, heightDiv2, radius, mPrimaryStrokePaint); canvas.drawLine(widthDiv2 - STROKE_WIDTH / 2f, heightDiv2 - radius, widthDiv2 - STROKE_WIDTH / 2f, heightDiv2 + radius, mPrimaryStrokePaint); + canvas.restore(); /// draw the right half - canvas.clipRect(widthDiv2, 0, width, height, Region.Op.REPLACE); + canvas.save(); + canvas.clipRect(widthDiv2, 0, width, height); canvas.drawCircle(widthDiv2, heightDiv2, radius, mSecondaryFillPaint); canvas.drawCircle(widthDiv2, heightDiv2, radius, mSecondaryStrokePaint); canvas.drawLine(widthDiv2 + STROKE_WIDTH / 2f, heightDiv2 - radius, widthDiv2 + STROKE_WIDTH / 2f, heightDiv2 + radius, mSecondaryStrokePaint); + canvas.restore(); } private int getDarkenedColor(int color) { diff --git a/app/src/main/res/layout/mockup_overlay_content.xml b/app/src/main/res/layout/mockup_overlay_content.xml index ede8d83..2c1662b 100644 --- a/app/src/main/res/layout/mockup_overlay_content.xml +++ b/app/src/main/res/layout/mockup_overlay_content.xml @@ -108,6 +108,6 @@ android:id="@+id/opacity" android:layout_width="match_parent" android:layout_height="wrap_content" - android:max="8"/> + android:max="9"/> \ No newline at end of file From 113458fa07ba5e9e4cf2f501f8671091329122df Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 30 Dec 2019 11:17:04 -0800 Subject: [PATCH 17/42] Fix color picker on Android 7 --- .../designertools/overlays/ColorPickerOverlay.java | 4 ++-- .../org/cyanogenmod/designertools/utils/ViewUtils.java | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java index db0c1c0..b375226 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java @@ -168,14 +168,14 @@ private void setup() { mNodeParams = new WindowManager.LayoutParams( nodeViewSize, nodeViewSize, - ViewUtils.getWindowType(), + ViewUtils.getWindowType(true), WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT); mNodeParams.gravity = Gravity.TOP | Gravity.LEFT; mMagnifierParams = new WindowManager.LayoutParams( magnifierWidth, magnifierHeight, - ViewUtils.getWindowType(), + ViewUtils.getWindowType(true), WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT); diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/ViewUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/ViewUtils.java index 94326a7..67ad09a 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/ViewUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/ViewUtils.java @@ -21,8 +21,14 @@ public class ViewUtils { public static int getWindowType() { + return getWindowType(false); + } + + public static int getWindowType(boolean useSystemAlert) { return (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N_MR1) - ? WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY + ? (useSystemAlert + ? WindowManager.LayoutParams.TYPE_SYSTEM_ALERT + : WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY) : WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } } From f2b6cab33c6ffceeac9f5e10ba657762bdb9e102 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 30 Dec 2019 11:49:32 -0800 Subject: [PATCH 18/42] Switch from appcompat to androidx --- .idea/caches/build_file_checksums.ser | Bin 534 -> 534 bytes .idea/caches/gradle_models.ser | Bin 128890 -> 130164 bytes .idea/codeStyles/codeStyleConfig.xml | 5 +++++ app/build.gradle | 2 +- .../overlays/ColorPickerOverlay.java | 2 +- .../designertools/overlays/MockOverlay.java | 2 +- .../designertools/ui/CreditsActivity.java | 2 +- .../ui/DualColorPickerDialog.java | 4 ++-- .../utils/NotificationUtils.java | 6 +++--- .../main/res/layout/dialog_color_picker.xml | 2 +- gradle.properties | 4 +++- 11 files changed, 18 insertions(+), 11 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 00d52af2d192d10d7228b1e5c4a44ae8d8697420..352128e6ae28c2e8aa8df8988a8bbcf2f5950d0e 100644 GIT binary patch delta 54 zcmV-60LlNB1eOGlm;_i_>t3;(JOK~^8%3JLah3**8lbk^I~Hh@=m8xORFmXK1MVLc M6MnX(jeW^+csw^1+yDRo delta 54 zcmV-60LlNB1eOGlm;_UMptG@@JOL0ZS6cvfE~+Dfo_$X@@KpJe=m8xOpFulR-vh^C MTRd2{s7QnKctoofaR2}S diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 78c27ec1271c5edbc7a4efc8497e2fd7051fb2bc..f15ad1875ecffa040b53b7bc1e7a6402548bb7d2 100644 GIT binary patch literal 130164 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 + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 794a0bf..1a4ac89 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,7 +23,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.12' - implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'androidx.appcompat:appcompat:1.0.0' implementation 'org.cyanogenmod:platform.sdk:6.0' implementation 'com.larswerkman:lobsterpicker:1.0.1' implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java index b375226..c0c5af3 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java @@ -42,7 +42,7 @@ import android.media.projection.MediaProjectionManager; import android.os.Handler; import android.os.IBinder; -import android.support.v4.view.animation.FastOutSlowInInterpolator; +import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.MotionEvent; diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java index 8f20d7a..5779c42 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java @@ -29,7 +29,7 @@ import android.graphics.PixelFormat; import android.graphics.Point; import android.os.IBinder; -import android.support.v7.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatImageView; import android.view.View; import android.view.ViewTreeObserver; import android.view.WindowManager; diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/CreditsActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/CreditsActivity.java index e917fef..040a017 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/CreditsActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/CreditsActivity.java @@ -20,7 +20,7 @@ import android.animation.ObjectAnimator; import android.app.Activity; import android.os.Bundle; -import android.support.v4.view.animation.FastOutSlowInInterpolator; +import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import android.view.View; import android.view.ViewAnimationUtils; import android.view.ViewTreeObserver; diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java b/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java index 413f194..a3e0170 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java @@ -20,8 +20,8 @@ import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; import android.view.ContextThemeWrapper; import android.view.MotionEvent; import android.view.View; diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/NotificationUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/NotificationUtils.java index 70d1329..17d46e1 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/NotificationUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/NotificationUtils.java @@ -21,9 +21,9 @@ import android.app.PendingIntent; import android.content.Context; import android.os.Build; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.v4.app.NotificationCompat; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.core.app.NotificationCompat; public class NotificationUtils { @NonNull diff --git a/app/src/main/res/layout/dialog_color_picker.xml b/app/src/main/res/layout/dialog_color_picker.xml index 6819753..3433c52 100644 --- a/app/src/main/res/layout/dialog_color_picker.xml +++ b/app/src/main/res/layout/dialog_color_picker.xml @@ -19,7 +19,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - diff --git a/gradle.properties b/gradle.properties index 9b6ae2a..bdda067 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,6 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true +android.enableJetifier=true +android.useAndroidX=true \ No newline at end of file From a09960872985d0b2ca94797702d47519088c3788 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 30 Dec 2019 12:28:50 -0800 Subject: [PATCH 19/42] Store mock images as png to preserve transparency --- .../java/org/cyanogenmod/designertools/utils/ImageUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/ImageUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/ImageUtils.java index 147b19f..a8ccc9d 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/ImageUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/ImageUtils.java @@ -59,6 +59,6 @@ public static boolean saveBitmap(Bitmap bmp, String path) throws FileNotFoundExc if (bmp == null || path == null) return false; FileOutputStream outputStream = new FileOutputStream(path); - return bmp.compress(Bitmap.CompressFormat.JPEG, 80, outputStream); + return bmp.compress(Bitmap.CompressFormat.PNG, 80, outputStream); } } From bc4a4fc07d933c750c6107a147dadb02d80b2f26 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 30 Dec 2019 12:58:23 -0800 Subject: [PATCH 20/42] Remove unused code in ColorPickerQuickSettingsTile --- .../qs/ColorPickerQuickSettingsTile.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java index 686e6aa..ea31d04 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java +++ b/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java @@ -15,15 +15,11 @@ */ package org.cyanogenmod.designertools.qs; -import android.app.Activity; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import org.cyanogenmod.designertools.DesignerToolsApplication; -import org.cyanogenmod.designertools.overlays.ColorPickerOverlay; -import org.cyanogenmod.designertools.ui.ScreenRecordRequestActivity; import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; import org.cyanogenmod.designertools.R; @@ -85,19 +81,5 @@ public void onReceive(Context context, Intent intent) { } } } - - private void startColorPickerOrRequestPermission(Context context) { - DesignerToolsApplication app = - (DesignerToolsApplication) context.getApplicationContext(); - if (app.getScreenRecordResultCode() == Activity.RESULT_OK && app.getScreenRecordResultData() != null) { - Intent newIntent = new Intent(context, ColorPickerOverlay.class); - context.startService(newIntent); - ColorPickerPreferences.setColorPickerActive(context, true); - } else { - Intent intent = new Intent(context, ScreenRecordRequestActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - } } } From 682589760b740a39b93e17209d39e8a81ce06e99 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 30 Dec 2019 12:58:46 -0800 Subject: [PATCH 21/42] If kernel info not available, don't show anything --- .../designertools/service/ScreenshotInfoService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java index 96a4f11..ed7c2c1 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java @@ -159,7 +159,7 @@ public static String getFormattedKernelVersion() { "IO Exception when getting kernel version for Device Info screen", e); - return "Unavailable"; + return ""; } } @@ -180,11 +180,11 @@ public static String formatKernelVersion(String rawKernelVersion) { Matcher m = Pattern.compile(PROC_VERSION_REGEX).matcher(rawKernelVersion); if (!m.matches()) { Log.e(TAG, "Regex did not match on /proc/version: " + rawKernelVersion); - return "Unavailable"; + return ""; } else if (m.groupCount() < 4) { Log.e(TAG, "Regex match on /proc/version only returned " + m.groupCount() + " groups"); - return "Unavailable"; + return ""; } return m.group(1) + "\n" + // 3.0.31-g6fb96c9 m.group(2) + " " + m.group(3) + "\n" + // x@y.com #1 From aef2072b9aa7e4cf3c1114fa7a1255f74d2b8904 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 30 Dec 2019 13:50:25 -0800 Subject: [PATCH 22/42] Clean up old and unused code --- .../overlays/ColorPickerOverlay.java | 5 ++--- .../designertools/overlays/GridOverlay.java | 5 ++--- .../service/ScreenshotInfoService.java | 1 - .../service/qs/ColorPickerTileService.java | 3 --- .../service/qs/GridOverlayTileService.java | 3 --- .../service/qs/MockOverlayTileService.java | 3 --- .../ui/ColorPickerCardFragment.java | 2 +- .../designertools/ui/CreditsActivity.java | 2 -- .../ui/DesignerToolCardFragment.java | 10 +++++----- .../ui/DesignerToolsActivity.java | 2 +- .../ui/DualColorPickerDialog.java | 4 ++-- .../ui/GridOverlayCardFragment.java | 16 +++++++--------- .../ui/MockupOverlayCardFragmnt.java | 10 +++++----- .../ui/StartOverlayActivity.java | 19 +++++++++++++++---- .../designertools/widget/DualColorPicker.java | 9 ++++----- .../widget/MagnifierNodeView.java | 8 ++++---- .../designertools/widget/MagnifierView.java | 6 +++--- app/src/main/res/values/colors.xml | 6 ++++++ 18 files changed, 57 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java index c0c5af3..26b7186 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java @@ -75,7 +75,6 @@ public class ColorPickerOverlay extends Service { private WindowManager.LayoutParams mNodeParams; private WindowManager.LayoutParams mMagnifierParams; - private MediaProjectionManager mMediaProjectionManager; private MediaProjection mMediaProjection; private VirtualDisplay mVirtualDisplay; private ImageReader mImageReader; @@ -407,8 +406,8 @@ private void setupMediaProjection() { mImageReader = ImageReader.newInstance(size.x, size.y, PixelFormat.RGBA_8888, 2); mImageReader.setOnImageAvailableListener(mImageAvailableListener, new Handler()); - mMediaProjectionManager = getSystemService(MediaProjectionManager.class); - mMediaProjection = mMediaProjectionManager.getMediaProjection(app.getScreenRecordResultCode(), + MediaProjectionManager mediaProjectionManager = getSystemService(MediaProjectionManager.class); + mMediaProjection = mediaProjectionManager.getMediaProjection(app.getScreenRecordResultCode(), app.getScreenRecordResultData()); mVirtualDisplay = mMediaProjection.createVirtualDisplay( ColorPickerOverlay.class.getSimpleName(), diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java index 4ab6998..daa499c 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java @@ -206,7 +206,6 @@ static class GridOverlayView extends View { private boolean mShowGrid; private boolean mShowKeylines; - private float mGridLineWidth; private float mColumnSize; private float mRowSize; private float mDensity; @@ -216,10 +215,10 @@ public GridOverlayView(Context context) { super(context); mDensity = getResources().getDisplayMetrics().density; - mGridLineWidth = mDensity; mGridPaint = new Paint(); mGridPaint.setColor(ColorUtils.getGridLineColor(context)); - mGridPaint.setStrokeWidth(mGridLineWidth); + float gridLineWidth = mDensity; + mGridPaint.setStrokeWidth(gridLineWidth); mKeylinePaint = new Paint(); mKeylinePaint.setColor(ColorUtils.getKeylineColor(context)); diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java index ed7c2c1..1d752ba 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java @@ -26,7 +26,6 @@ import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; -import android.view.Surface; import android.view.View; import android.view.WindowManager; import android.widget.TextView; diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java index c793255..f6d1aa8 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java @@ -20,7 +20,6 @@ import android.os.Build; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; -import android.util.Log; import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.R; @@ -29,8 +28,6 @@ @TargetApi(Build.VERSION_CODES.N) public class ColorPickerTileService extends TileService { - private static final String TAG = ColorPickerTileService.class.getSimpleName(); - public ColorPickerTileService() { super(); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java index a48c0d1..4f34eda 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java @@ -20,7 +20,6 @@ import android.os.Build; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; -import android.util.Log; import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.R; @@ -28,8 +27,6 @@ @TargetApi(Build.VERSION_CODES.N) public class GridOverlayTileService extends TileService { - private static final String TAG = GridOverlayTileService.class.getSimpleName(); - public GridOverlayTileService() { super(); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java index c9d60a5..94f8859 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java @@ -20,7 +20,6 @@ import android.os.Build; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; -import android.util.Log; import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.R; @@ -28,8 +27,6 @@ @TargetApi(Build.VERSION_CODES.N) public class MockOverlayTileService extends TileService { - private static final String TAG = MockOverlayTileService.class.getSimpleName(); - public MockOverlayTileService() { super(); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java index cdd1a6b..8e9bf83 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java @@ -40,7 +40,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, setTitleSummary(R.string.header_summary_color_picker); setIconResource(R.drawable.ic_qs_colorpicker_on); base.setBackgroundTintList(ColorStateList.valueOf( - getResources().getColor(R.color.colorColorPickerCardTint))); + getActivity().getColor(R.color.colorColorPickerCardTint))); return base; } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/CreditsActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/CreditsActivity.java index 040a017..c26cd4e 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/CreditsActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/CreditsActivity.java @@ -36,8 +36,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); overridePendingTransition(0, 0); setContentView(R.layout.activity_credits); - if (savedInstanceState == null) { - } } private void circularRevealActivity(View v) { diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolCardFragment.java index df4ac35..bd60d2d 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolCardFragment.java @@ -49,11 +49,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, inflater.cloneInContext(ctx); View v = inflater.inflate(R.layout.card_layout, container, true); mParentLayout = v.findViewById(R.id.parent_layout); - mIcon = (ImageView) v.findViewById(R.id.header_icon); - mHeaderTitle = (TextView) v.findViewById(R.id.header_title); - mHeaderSummary = (TextView) v.findViewById(R.id.header_summary); - mEnabledSwitch = (Switch) v.findViewById(R.id.enable_switch); - mCardContent = (FrameLayout) v.findViewById(R.id.card_content); + mIcon = v.findViewById(R.id.header_icon); + mHeaderTitle = v.findViewById(R.id.header_title); + mHeaderSummary = v.findViewById(R.id.header_summary); + mEnabledSwitch = v.findViewById(R.id.enable_switch); + mCardContent = v.findViewById(R.id.card_content); mEnabledSwitch.setOnCheckedChangeListener(this); diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolsActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolsActivity.java index b4e8855..2afc3ce 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolsActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolsActivity.java @@ -31,7 +31,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_designer_tools); if (!LaunchUtils.isCyanogenMod(this)) { - TextView tv = (TextView) findViewById(R.id.qs_tiles_section); + TextView tv = findViewById(R.id.qs_tiles_section); tv.setText(R.string.overlays_section_text); } View headerGlyph = findViewById(R.id.header_glyph); diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java b/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java index a3e0170..e17bf6b 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/DualColorPickerDialog.java @@ -46,11 +46,11 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { initColorPickerViews(); - mViewPager = (ViewPager) v.findViewById(R.id.view_pager); + mViewPager = v.findViewById(R.id.view_pager); mAdapter = new ColorPickerPagerAdapter(); mViewPager.setAdapter(mAdapter); - mPageIndicator = (CirclePageIndicator) v.findViewById(R.id.view_pager_indicator); + mPageIndicator = v.findViewById(R.id.view_pager_indicator); mPageIndicator.setViewPager(mViewPager); mPageIndicator.setFillColor(getContext().getColor(R.color.colorGridOverlayCardTint)); diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java index 77b5fa7..72728cc 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java @@ -62,13 +62,13 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, context.getColor(R.color.colorGridOverlayCardTint))); View v = inflater.inflate(R.layout.grid_overlay_content, mCardContent, true); - mIncludeKeylines = (CheckBox) v.findViewById(R.id.include_keylines); - mIncudeCustomGrid = (CheckBox) v.findViewById(R.id.include_custom_grid_size); - mColumnSizer = (SeekBar) v.findViewById(R.id.column_sizer); + mIncludeKeylines = v.findViewById(R.id.include_keylines); + mIncudeCustomGrid = v.findViewById(R.id.include_custom_grid_size); + mColumnSizer = v.findViewById(R.id.column_sizer); mColumnSizer.setProgress((GridPreferences.getGridColumnSize(getContext(), 8) - 4) / 2); - mRowSizer = (SeekBar) v.findViewById(R.id.row_sizer); + mRowSizer = v.findViewById(R.id.row_sizer); mRowSizer.setProgress((GridPreferences.getGridRowSize(getContext(), 8) - 4) / 2); - mGridPreview = (GridPreview) v.findViewById(R.id.grid_preview); + mGridPreview = v.findViewById(R.id.grid_preview); mGridPreview.setColumnSize(GridPreferences.getGridColumnSize(getContext(), 8)); mGridPreview.setRowSize(GridPreferences.getGridRowSize(getContext(), 8)); @@ -97,7 +97,7 @@ public boolean onTouch(View v, MotionEvent event) { } }); - mDualColorPicker = (DualColorPicker) v.findViewById(R.id.color_picker); + mDualColorPicker = v.findViewById(R.id.color_picker); mDualColorPicker.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -197,8 +197,6 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override - public void onReceive(Context context, Intent intent) { - - } + public void onReceive(Context context, Intent intent) {} }; } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java b/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java index d4673cb..a5cef8c 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java @@ -67,13 +67,13 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, getResources().getColor(R.color.colorMockupOverlayCardTint))); View v =inflater.inflate(R.layout.mockup_overlay_content, mCardContent); - mPortraitImage = (ImageView) v.findViewById(R.id.portrait_image); + mPortraitImage = v.findViewById(R.id.portrait_image); mPortraitImage.setImageBitmap(MockupUtils.getPortraitMockup(getContext())); mPortraitImage.setOnClickListener(mImageClickListener); - mLandscapeImage = (ImageView) v.findViewById(R.id.landscape_image); + mLandscapeImage = v.findViewById(R.id.landscape_image); mLandscapeImage.setImageBitmap(MockupUtils.getLandscapeMockup(getContext())); mLandscapeImage.setOnClickListener(mImageClickListener); - mReset = (Button) v.findViewById(R.id.reset); + mReset = v.findViewById(R.id.reset); mReset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -87,8 +87,8 @@ public void onClick(View v) { } } }); - mOpacityText = (TextView) v.findViewById(R.id.opacity_text); - mOpacityLevel = (SeekBar) v.findViewById(R.id.opacity); + mOpacityText = v.findViewById(R.id.opacity_text); + mOpacityLevel = v.findViewById(R.id.opacity); mOpacityLevel.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java index 7019dbb..570fbb0 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java @@ -1,3 +1,18 @@ +/* + * Copyright (C) 2016 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.cyanogenmod.designertools.ui; import android.app.Activity; @@ -12,10 +27,6 @@ import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; -/** - * Created by clark on 12/19/16. - */ - public class StartOverlayActivity extends Activity { private static final int REQUEST_OVERLAY_PERMSSISION = 42; diff --git a/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java b/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java index 0b2dd08..013840c 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java +++ b/app/src/main/java/org/cyanogenmod/designertools/widget/DualColorPicker.java @@ -8,7 +8,6 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.graphics.Region; import android.util.AttributeSet; import android.view.View; @@ -40,11 +39,11 @@ public DualColorPicker(Context context, AttributeSet attrs, int defStyleAttr, in super(context, attrs, defStyleAttr, defStyleRes); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.DualColorPicker, 0, 0); int primaryColor = ta.getColor(R.styleable.DualColorPicker_primaryColor, - GridPreferences.getGridLineColor(context, getResources() - .getColor(R.color.dualColorPickerDefaultPrimaryColor))); + GridPreferences.getGridLineColor(context, + context.getColor(R.color.dualColorPickerDefaultPrimaryColor))); int secondaryColor = ta.getColor(R.styleable.DualColorPicker_primaryColor, - GridPreferences.getKeylineColor(context, getResources() - .getColor(R.color.dualColorPickerDefaultSecondaryColor))); + GridPreferences.getKeylineColor(context, + context.getColor(R.color.dualColorPickerDefaultSecondaryColor))); mPrimaryFillPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); mPrimaryFillPaint.setStyle(Paint.Style.FILL); diff --git a/app/src/main/java/org/cyanogenmod/designertools/widget/MagnifierNodeView.java b/app/src/main/java/org/cyanogenmod/designertools/widget/MagnifierNodeView.java index 7512774..7691467 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/widget/MagnifierNodeView.java +++ b/app/src/main/java/org/cyanogenmod/designertools/widget/MagnifierNodeView.java @@ -44,24 +44,24 @@ public MagnifierNodeView(Context context, AttributeSet attrs, int defStyleAttr, float twoDp = 2f * dm.density; mReticlePaint = new Paint(); mReticlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mReticlePaint.setColor(0x50ffffff); + mReticlePaint.setColor(context.getColor(R.color.colorPickerNodeReticleColor)); mReticlePaint.setStrokeWidth(twoDp); mReticlePaint.setStyle(Paint.Style.STROKE); mOutlinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mOutlinePaint.setColor(0x80ffffff); + mOutlinePaint.setColor(context.getColor(R.color.colorPickerNodeOutlineColor)); mOutlinePaint.setStrokeWidth(twoDp); mOutlinePaint.setStyle(Paint.Style.STROKE); mOutlinePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR)); mFillPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mFillPaint.setColor(0x80000000); + mFillPaint.setColor(context.getColor(R.color.colorPickerNodeFillColor)); mFillPaint.setStrokeWidth(twoDp); mFillPaint.setStyle(Paint.Style.FILL_AND_STROKE); mFillPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); mClearPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mClearPaint.setColor(0); + mClearPaint.setColor(context.getColor(R.color.colorPickerNodeClearColor)); mClearPaint.setStrokeWidth(twoDp); mClearPaint.setStyle(Paint.Style.FILL); mClearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); diff --git a/app/src/main/java/org/cyanogenmod/designertools/widget/MagnifierView.java b/app/src/main/java/org/cyanogenmod/designertools/widget/MagnifierView.java index 6321e46..12f79bc 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/widget/MagnifierView.java +++ b/app/src/main/java/org/cyanogenmod/designertools/widget/MagnifierView.java @@ -67,14 +67,14 @@ public MagnifierView(Context context, AttributeSet attrs, int defStyleAttr, int DisplayMetrics dm = getResources().getDisplayMetrics(); mGridPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mGridPaint.setColor(0xff000000); + mGridPaint.setColor(context.getColor(R.color.colorPickerMagnifierGridColor)); mGridPaint.setAlpha(128); mGridPaint.setStyle(Paint.Style.STROKE); mGridPaint.setStrokeWidth(1f * dm.density); mGridPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); mPixelOutlinePaint = new Paint(); - mPixelOutlinePaint.setColor(0xff000000); + mPixelOutlinePaint.setColor(context.getColor(R.color.colorPickerMagnifierGridColor)); mPixelOutlinePaint.setStyle(Paint.Style.STROKE); mPixelOutlinePaint.setStrokeWidth(2f * dm.density); mPixelOutlinePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); @@ -94,7 +94,7 @@ public MagnifierView(Context context, AttributeSet attrs, int defStyleAttr, int @Override protected void onFinishInflate() { super.onFinishInflate(); - mColorValueTextView = (TextView) findViewById(R.id.color_value); + mColorValueTextView = findViewById(R.id.color_value); mColorValueTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 848757a..2c47915 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -43,4 +43,10 @@ #f9f9f9 #263238 + #50ffffff + #80ffffff + #80000000 + #00000000 + #ff000000 + From 7000d4384345213ca0840a6086fa7c252f291fbf Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Tue, 14 Jan 2020 09:48:23 -0800 Subject: [PATCH 23/42] Add support for adaptive icons (fianlly!) --- .idea/gradle.xml | 3 - .../res/drawable-hdpi/ic_header_glyph.png | Bin 0 -> 875 bytes .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 5000 bytes .../res/drawable-mdpi/ic_header_glyph.png | Bin 0 -> 539 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2848 bytes .../res/drawable-xhdpi/ic_header_glyph.png | Bin 0 -> 1054 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 7590 bytes .../res/drawable-xxhdpi/ic_header_glyph.png | Bin 0 -> 1435 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 13801 bytes .../main/res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 21522 bytes app/src/main/res/drawable/ic_header_glyph.xml | 61 +++--------------- .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 ++ .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 2188 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 11293 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 1427 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 5640 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 3028 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 18849 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 4811 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 39064 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 7060 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 66548 bytes 22 files changed, 15 insertions(+), 54 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_header_glyph.png create mode 100644 app/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-mdpi/ic_header_glyph.png create mode 100644 app/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_header_glyph.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_header_glyph.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 6e5d2ea..172940c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,9 +3,6 @@

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 D9C_HS literal 0 HcmV?d00001 From 0ed2459f20ebeed87cc7a4a7e4a6676c36f9f810 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Sat, 7 Mar 2020 12:20:21 -0800 Subject: [PATCH 24/42] Version bump for 2.2.0 release --- .idea/caches/build_file_checksums.ser | Bin 534 -> 534 bytes app/build.gradle | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 352128e6ae28c2e8aa8df8988a8bbcf2f5950d0e..467d2e1e7245c250f14e9564bd3c9c87abaf31c4 100644 GIT binary patch delta 16 YcmbQnGL2=zbk>4xOYX63oKwXJ06268)c^nh delta 16 YcmbQnGL2=zbk_WcsMm2D=TtEQ05ydMlK=n! diff --git a/app/build.gradle b/app/build.gradle index 1a4ac89..b46c3be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.scheffsblend.designertools" minSdkVersion 24 targetSdkVersion 28 - versionCode 3 - versionName "2.1.0" + versionCode 4 + versionName "2.2.0" setProperty("archivesBaseName", "DesignerTools-$versionName") } buildTypes { From f590f5bf8ffbf0e44ac363d9d3a31fd00f804cfd Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 16 Mar 2020 09:57:05 -0700 Subject: [PATCH 25/42] Set proper state for QS tiles This fixes an issue where the background color does not change beacause the OS is not aware of what state the tile is in --- .../designertools/service/qs/ColorPickerTileService.java | 6 +++--- .../designertools/service/qs/GridOverlayTileService.java | 6 +++--- .../designertools/service/qs/MockOverlayTileService.java | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java index f6d1aa8..d01243f 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java @@ -35,6 +35,8 @@ public ColorPickerTileService() { @Override public void onTileAdded() { super.onTileAdded(); + final Tile tile = getQsTile(); + tile.setIcon(Icon.createWithResource(this, R.drawable.ic_qs_colorpicker_on)); } @Override @@ -69,9 +71,7 @@ public void onClick() { private void updateTile(boolean isOn) { final Tile tile = getQsTile(); - tile.setIcon(Icon.createWithResource(this, isOn - ? R.drawable.ic_qs_colorpicker_on - : R.drawable.ic_qs_colorpicker_off)); + tile.setState(isOn ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); tile.updateTile(); } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java index 4f34eda..ef1ae3a 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java @@ -34,6 +34,8 @@ public GridOverlayTileService() { @Override public void onTileAdded() { super.onTileAdded(); + final Tile tile = getQsTile(); + tile.setIcon(Icon.createWithResource(this, R.drawable.ic_qs_grid_on)); } @Override @@ -67,9 +69,7 @@ public void onClick() { private void updateTile(boolean isOn) { final Tile tile = getQsTile(); - tile.setIcon(Icon.createWithResource(this, isOn - ? R.drawable.ic_qs_grid_on - : R.drawable.ic_qs_grid_off)); + tile.setState(isOn ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); tile.updateTile(); } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java index 94f8859..0378e9c 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java @@ -34,6 +34,8 @@ public MockOverlayTileService() { @Override public void onTileAdded() { super.onTileAdded(); + final Tile tile = getQsTile(); + tile.setIcon(Icon.createWithResource(this, R.drawable.ic_qs_overlay_on)); } @Override @@ -66,9 +68,7 @@ public void onClick() { private void updateTile(boolean isOn) { final Tile tile = getQsTile(); - tile.setIcon(Icon.createWithResource(this, isOn - ? R.drawable.ic_qs_overlay_on - : R.drawable.ic_qs_overlay_off)); + tile.setState(isOn ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); tile.updateTile(); } } From db2c8d9f2c0190b53c52255771da928457b78bb5 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 16 Mar 2020 09:59:16 -0700 Subject: [PATCH 26/42] version bump to 2.2.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b46c3be..f52f2cf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.scheffsblend.designertools" minSdkVersion 24 targetSdkVersion 28 - versionCode 4 - versionName "2.2.0" + versionCode 5 + versionName "2.2.1" setProperty("archivesBaseName", "DesignerTools-$versionName") } buildTypes { From 81efa04bbdb046a3bd9468dc965319286518452b Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Thu, 20 Oct 2022 09:57:12 -0700 Subject: [PATCH 27/42] start targeting api 33 --- .idea/compiler.xml | 18 +---------------- .idea/gradle.xml | 5 +++-- .idea/jarRepositories.xml | 25 ++++++++++++++++++++++++ .idea/misc.xml | 8 +++++--- .idea/modules.xml | 7 +++++-- .idea/runConfigurations.xml | 12 ------------ app/build.gradle | 17 ++++++++++++---- app/src/main/AndroidManifest.xml | 22 +++++++++++++++------ build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 10 files changed, 70 insertions(+), 48 deletions(-) create mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/runConfigurations.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 96cc43e..fb7f4a8 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,22 +1,6 @@ - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 172940c..d9bfb3d 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,19 +1,20 @@ + diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index bb89e42..adadb98 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,7 +5,7 @@ - + diff --git a/.idea/modules.xml b/.idea/modules.xml index 07a95c8..d7cfa02 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,11 @@ - - + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f52f2cf..bc65385 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 28 - buildToolsVersion "28.0.3" + compileSdk 33 defaultConfig { applicationId "com.scheffsblend.designertools" minSdkVersion 24 - targetSdkVersion 28 + targetSdkVersion 33 versionCode 5 versionName "2.2.1" setProperty("archivesBaseName", "DesignerTools-$versionName") @@ -18,12 +17,22 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + dependenciesInfo { + includeInApk true + includeInBundle true + } + buildToolsVersion '33.0.0' + namespace 'org.cyanogenmod.designertools' } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.12' - implementation 'androidx.appcompat:appcompat:1.0.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'org.cyanogenmod:platform.sdk:6.0' implementation 'com.larswerkman:lobsterpicker:1.0.1' implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d027e05..4f659cd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + @@ -17,7 +16,9 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> - + @@ -47,19 +48,25 @@ android:exported="false" android:excludeFromRecents="true" /> - + - + - + @@ -88,6 +95,7 @@ android:name=".service.qs.GridOverlayTileService" android:icon="@drawable/ic_qs_grid_off" android:label="@string/grid_qs_tile_label" + android:exported="true" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> @@ -98,6 +106,7 @@ android:name=".service.qs.MockOverlayTileService" android:icon="@drawable/ic_qs_overlay_off" android:label="@string/mock_qs_tile_label" + android:exported="true" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> @@ -108,6 +117,7 @@ android:name=".service.qs.ColorPickerTileService" android:icon="@drawable/ic_qs_colorpicker_off" android:label="@string/color_picker_qs_tile_label" + android:exported="true" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> diff --git a/build.gradle b/build.gradle index d011437..2ca7ceb 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:7.3.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 827315e..0f00a26 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip From 9f78d52ba4787f03e733799bd443f681f7504b38 Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Thu, 20 Oct 2022 10:01:45 -0700 Subject: [PATCH 28/42] remove closing of system dialog --- .../org/cyanogenmod/designertools/ui/StartOverlayActivity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java index 570fbb0..0761561 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java @@ -47,8 +47,6 @@ protected void onCreate(Bundle savedInstanceState) { startOverlayService(mOverlayType); finish(); } else { - Intent closeDialogsIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); - sendBroadcast(closeDialogsIntent); Intent newIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(newIntent, REQUEST_OVERLAY_PERMSSISION); From f2adb99de44c0a43ae2207a7025b3f69f106876a Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Thu, 20 Oct 2022 10:13:42 -0700 Subject: [PATCH 29/42] flag pending intents for overlays as immutable --- .../designertools/overlays/ColorPickerOverlay.java | 7 +++++-- .../cyanogenmod/designertools/overlays/GridOverlay.java | 7 +++++-- .../cyanogenmod/designertools/overlays/MockOverlay.java | 7 +++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java index 26b7186..8788021 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java @@ -440,8 +440,11 @@ private Notification getPersistentNotification(boolean actionIsHide) { : R.drawable.ic_qs_colorpicker_off; final String contentText = getString(actionIsHide ? R.string.notif_content_hide_picker : R.string.notif_content_show_picker); - final PendingIntent pi = PendingIntent.getBroadcast(this, 0, - new Intent(actionIsHide ? ACTION_HIDE_PICKER : ACTION_SHOW_PICKER), 0); + final PendingIntent pi = PendingIntent.getBroadcast( + this, + 0, + new Intent(actionIsHide ? ACTION_HIDE_PICKER : ACTION_SHOW_PICKER), + PendingIntent.FLAG_IMMUTABLE); return NotificationUtils.createForegroundServiceNotification( this, diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java index daa499c..3f37110 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java @@ -131,8 +131,11 @@ private Notification getPersistentNotification(boolean actionIsHide) { : R.drawable.ic_qs_grid_off; final String contentText = getString(actionIsHide ? R.string.notif_content_hide_grid_overlay : R.string.notif_content_show_grid_overlay); - final PendingIntent pi = PendingIntent.getBroadcast(this, 0, - new Intent(actionIsHide ? ACTION_HIDE_OVERLAY : ACTION_SHOW_OVERLAY), 0); + final PendingIntent pi = PendingIntent.getBroadcast( + this, + 0, + new Intent(actionIsHide ? ACTION_HIDE_OVERLAY : ACTION_SHOW_OVERLAY), + PendingIntent.FLAG_IMMUTABLE); return NotificationUtils.createForegroundServiceNotification( this, diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java index 5779c42..980cb52 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java @@ -132,8 +132,11 @@ private Notification getPersistentNotification(boolean actionIsHide) { : R.drawable.ic_qs_overlay_off; final String contentText = getString(actionIsHide ? R.string.notif_content_hide_mock_overlay : R.string.notif_content_show_mock_overlay); - final PendingIntent pi = PendingIntent.getBroadcast(this, 0, - new Intent(actionIsHide ? ACTION_HIDE_OVERLAY : ACTION_SHOW_OVERLAY), 0); + final PendingIntent pi = PendingIntent.getBroadcast( + this, + 0, + new Intent(actionIsHide ? ACTION_HIDE_OVERLAY : ACTION_SHOW_OVERLAY), + PendingIntent.FLAG_IMMUTABLE); return NotificationUtils.createForegroundServiceNotification( this, From 526b4a4ed60df29ef5bfec8ba7e59ba88c4f98d4 Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Thu, 20 Oct 2022 10:20:34 -0700 Subject: [PATCH 30/42] declare 'mediaProjection' service type for color picker --- app/src/main/AndroidManifest.xml | 4 +++- .../designertools/overlays/ColorPickerOverlay.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4f659cd..39b229e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -85,7 +85,9 @@ - + diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java index 8788021..e891b36 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java @@ -153,6 +153,7 @@ public void onConfigurationChanged(Configuration newConfig) { } private void setup() { + startForeground(NOTIFICATION_ID, getPersistentNotification(true)); mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); setupMediaProjection(); @@ -217,7 +218,6 @@ public boolean onPreDraw() { filter.addAction(ACTION_HIDE_PICKER); filter.addAction(ACTION_SHOW_PICKER); registerReceiver(mReceiver, filter); - startForeground(NOTIFICATION_ID, getPersistentNotification(true)); } private void removeViewIfAttached(View v) { From 3499293a0b38d1fed319950e4ef9b557cf999c2b Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Fri, 21 Oct 2022 10:57:24 -0700 Subject: [PATCH 31/42] use media store apis for accessing screenshots --- app/src/main/AndroidManifest.xml | 10 ++++- .../service/ScreenshotInfoService.java | 40 ++++++++++++------- .../service/ScreenshotListenerService.java | 11 +++-- .../ui/ScreenshotCardFragment.java | 21 +++++++--- 4 files changed, 57 insertions(+), 25 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 39b229e..d314b73 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,8 +2,13 @@ - - + + + @@ -14,6 +19,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" + android:requestLegacyExternalStorage="true" android:theme="@style/AppTheme"> = Build.VERSION_CODES.TIRAMISU + ? Manifest.permission.READ_MEDIA_IMAGES + : Manifest.permission.READ_EXTERNAL_STORAGE; + } } From 78cf35b4385b3d783b0a6083dd00d1aa30a710be Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Fri, 21 Oct 2022 12:30:35 -0700 Subject: [PATCH 32/42] switch to MANAGE_EXTERNAL_STORAGE for api 30+ --- app/src/main/AndroidManifest.xml | 4 +-- .../service/ScreenshotInfoService.java | 14 +++++------ .../service/ScreenshotListenerService.java | 18 ++++--------- .../ui/ScreenshotCardFragment.java | 25 ++++++++++++------- 4 files changed, 29 insertions(+), 32 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d314b73..4559b80 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,11 +4,11 @@ + android:maxSdkVersion="32" /> - + diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java index 884aa8b..462b2d9 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java @@ -38,8 +38,6 @@ import org.cyanogenmod.designertools.utils.LayoutRenderUtils; import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; @@ -88,17 +86,17 @@ private Bitmap getInfoPane() { String kernelVersion = getFormattedKernelVersion(); View pane = View.inflate(this, R.layout.screenshot_info, null); - TextView tv = (TextView) pane.findViewById(R.id.date_time_info); + TextView tv = pane.findViewById(R.id.date_time_info); tv.setText(dateTime); - tv = (TextView) pane.findViewById(R.id.device_name); + tv = pane.findViewById(R.id.device_name); tv.setText(device); - tv = (TextView) pane.findViewById(R.id.code_name); + tv = pane.findViewById(R.id.code_name); tv.setText(codeName); - tv = (TextView) pane.findViewById(R.id.build); + tv = pane.findViewById(R.id.build); tv.setText(build); - tv = (TextView) pane.findViewById(R.id.density); + tv = pane.findViewById(R.id.density); tv.setText(density); - tv = (TextView) pane.findViewById(R.id.kernel); + tv = pane.findViewById(R.id.kernel); tv.setText(kernelVersion); return LayoutRenderUtils.renderViewToBitmap(pane); diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java index 0a87c93..7c236d5 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotListenerService.java @@ -34,8 +34,6 @@ import org.cyanogenmod.designertools.utils.PreferenceUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils.ScreenshotPreferences; -import java.io.File; - public class ScreenshotListenerService extends Service implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String CHANNEL_ID = "DesignerTools.ScreenshotListenerService"; @@ -123,15 +121,13 @@ private class ScreenShotObserver extends ContentObserver { @Override public void onChange(boolean selfChange, Uri uri) { if (uri.toString().startsWith(EXTERNAL_CONTENT_URI_MATCHER)) { - Cursor cursor = null; - try { - cursor = getContentResolver().query(uri, PROJECTION, null, null, - SORT_ORDER); + try (Cursor cursor = getContentResolver().query(uri, PROJECTION, null, null, + SORT_ORDER)) { if (cursor != null && cursor.moveToFirst()) { String path = cursor.getString( - cursor.getColumnIndex(MediaStore.Images.Media.DATA)); + cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)); if (path.substring(path.lastIndexOf("/") + 1).toLowerCase().startsWith("screenshot") && - !path.equals(mLastProcessedImage)) { + !path.equals(mLastProcessedImage)) { mLastProcessedImage = path; final Intent intent = new Intent(ScreenshotListenerService.this, @@ -147,11 +143,7 @@ public void run() { } } } catch (Exception e) { - Log.e(TAG, "open cursor fail"); - } finally { - if (cursor != null) { - cursor.close(); - } + Log.e(TAG, "open cursor fail", e); } } super.onChange(selfChange, uri); diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java index 9aa1ccf..dbfefa5 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java @@ -21,6 +21,8 @@ import android.content.res.ColorStateList; import android.os.Build; import android.os.Bundle; +import android.os.Environment; +import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -31,6 +33,7 @@ import org.cyanogenmod.designertools.utils.PreferenceUtils.ScreenshotPreferences; public class ScreenshotCardFragment extends DesignerToolCardFragment { + private static final int REQUEST_CODE = 0x42; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -51,7 +54,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + if (hasRequiredPermissions()) { ScreenshotPreferences.setScreenshotInfoEnabled(getContext(), true); Intent newIntent = new Intent(getContext(), ScreenshotListenerService.class); getContext().startService(newIntent); @@ -69,17 +72,18 @@ protected int getCardStyleResourceId() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { - if (getActivity().checkSelfPermission(getReadPermission()) - == PackageManager.PERMISSION_GRANTED) { + if (hasRequiredPermissions()) { ScreenshotPreferences.setScreenshotInfoEnabled(getContext(), true); Intent newIntent = new Intent(getContext(), ScreenshotListenerService.class); getContext().startService(newIntent); } else { mEnabledSwitch.setChecked(false); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { - requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 42); + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); } else { - requestPermissions(new String[]{getReadPermission()}, 42); + Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getApplicationContext().startActivity(intent); } } } else { @@ -87,9 +91,12 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { } } - private static String getReadPermission() { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU - ? Manifest.permission.READ_MEDIA_IMAGES - : Manifest.permission.READ_EXTERNAL_STORAGE; + private boolean hasRequiredPermissions() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { + return getApplicationContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) + == PackageManager.PERMISSION_GRANTED; + } else { + return Environment.isExternalStorageManager(); + } } } From e062ae854917377ba54f6ba58eb30fb37e038621 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Fri, 21 Oct 2022 13:27:39 -0700 Subject: [PATCH 33/42] remove cmsdk and old cm tile related code --- .idea/gradle.xml | 1 - .idea/misc.xml | 2 +- .idea/modules.xml | 2 +- app/build.gradle | 1 - .../overlays/ColorPickerOverlay.java | 45 ---------- .../designertools/overlays/GridOverlay.java | 44 ---------- .../designertools/overlays/MockOverlay.java | 38 --------- .../qs/ColorPickerQuickSettingsTile.java | 85 ------------------- .../qs/GridQuickSettingsTile.java | 81 ------------------ .../qs/MockQuickSettingsTile.java | 81 ------------------ .../designertools/qs/OnOffTileState.java | 23 ----- .../designertools/receiver/BootReceiver.java | 8 -- .../service/ScreenshotInfoService.java | 30 +------ .../service/qs/ColorPickerTileService.java | 6 -- .../service/qs/GridOverlayTileService.java | 3 - .../service/qs/MockOverlayTileService.java | 7 +- .../ui/ColorPickerCardFragment.java | 9 +- .../ui/DesignerToolsActivity.java | 4 - .../ui/GridOverlayCardFragment.java | 8 +- .../ui/MockupOverlayCardFragmnt.java | 8 +- .../designertools/utils/LaunchUtils.java | 81 ------------------ .../layout-land/activity_designer_tools.xml | 2 +- .../layout-w600dp/activity_designer_tools.xml | 2 +- .../res/layout/activity_designer_tools.xml | 2 +- 24 files changed, 14 insertions(+), 559 deletions(-) delete mode 100644 app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java delete mode 100644 app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java delete mode 100644 app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java delete mode 100644 app/src/main/java/org/cyanogenmod/designertools/qs/OnOffTileState.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d9bfb3d..1ddcc05 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -8,7 +8,6 @@ - + diff --git a/.idea/modules.xml b/.idea/modules.xml index d7cfa02..3154d6a 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,11 +2,11 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bc65385..a01f35a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,7 +33,6 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.12' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'org.cyanogenmod:platform.sdk:6.0' implementation 'com.larswerkman:lobsterpicker:1.0.1' implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' } diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java index e891b36..5929f74 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java @@ -22,10 +22,7 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; @@ -52,8 +49,6 @@ import android.view.animation.OvershootInterpolator; import org.cyanogenmod.designertools.DesignerToolsApplication; -import org.cyanogenmod.designertools.qs.ColorPickerQuickSettingsTile; -import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.utils.NotificationUtils; import org.cyanogenmod.designertools.utils.ViewUtils; @@ -118,10 +113,6 @@ public void onDestroy() { mMediaProjection = null; mVirtualDisplay = null; - if (mReceiver != null) { - unregisterReceiver(mReceiver); - mReceiver = null; - } if (mImageReader != null) { mImageReader.close(); mImageReader = null; @@ -212,12 +203,6 @@ public boolean onPreDraw() { mLastPosition = new PointF(); mStartPosition = new PointF(); mDampeningFactor = DAMPENING_FACTOR_DP * dm.density; - - IntentFilter filter = new IntentFilter(ColorPickerQuickSettingsTile.ACTION_TOGGLE_STATE); - filter.addAction(ColorPickerQuickSettingsTile.ACTION_UNPUBLISH); - filter.addAction(ACTION_HIDE_PICKER); - filter.addAction(ACTION_SHOW_PICKER); - registerReceiver(mReceiver, filter); } private void removeViewIfAttached(View v) { @@ -488,36 +473,6 @@ public void onImageAvailable(ImageReader reader) { } }; - private BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - final String action = intent.getAction(); - if (ColorPickerQuickSettingsTile.ACTION_UNPUBLISH.equals(action)) { - stopSelf(); - } else if (ColorPickerQuickSettingsTile.ACTION_TOGGLE_STATE.equals(action)) { - int state = - intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); - if (state == OnOffTileState.STATE_ON) { - stopSelf(); - } - } else if (ACTION_HIDE_PICKER.equals(action)) { - animateColorPickerOut(new Runnable() { - @Override - public void run() { - removeOverlayViewsIfAttached(); - teardownMediaProjection(); - updateNotification(false); - } - }); - } else if (ACTION_SHOW_PICKER.equals(action)) { - addOverlayViewsIfDetached(); - setupMediaProjection(); - updateNotification(true); - animateColorPickerIn(); - } - } - }; - private View.OnTouchListener mOnTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java index 3f37110..93fa5ea 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/GridOverlay.java @@ -19,10 +19,8 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.SharedPreferences; import android.graphics.Canvas; import android.graphics.Paint; @@ -38,8 +36,6 @@ import android.view.WindowManager; import org.cyanogenmod.designertools.DesignerToolsApplication; -import org.cyanogenmod.designertools.qs.GridQuickSettingsTile; -import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.utils.ColorUtils; import org.cyanogenmod.designertools.utils.NotificationUtils; @@ -82,10 +78,6 @@ public void run() { } }); } - if (mReceiver != null) { - unregisterReceiver(mReceiver); - mReceiver = null; - } ((DesignerToolsApplication) getApplicationContext()).setGridOverlayOn(false); } @@ -107,11 +99,6 @@ public boolean onPreDraw() { return false; } }); - IntentFilter filter = new IntentFilter(GridQuickSettingsTile.ACTION_TOGGLE_STATE); - filter.addAction(GridQuickSettingsTile.ACTION_UNPUBLISH); - filter.addAction(ACTION_HIDE_OVERLAY); - filter.addAction(ACTION_SHOW_OVERLAY); - registerReceiver(mReceiver, filter); startForeground(NOTIFICATION_ID, getPersistentNotification(true)); } @@ -146,37 +133,6 @@ private Notification getPersistentNotification(boolean actionIsHide) { pi); } - private BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - final String action = intent.getAction(); - if (GridQuickSettingsTile.ACTION_UNPUBLISH.equals(action)) { - stopSelf(); - } else if (GridQuickSettingsTile.ACTION_TOGGLE_STATE.equals(action)) { - int state = - intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); - if (state == OnOffTileState.STATE_ON) { - stopSelf(); - } - } else if (ACTION_HIDE_OVERLAY.equals(action)) { - hideOverlay(new Runnable() { - @Override - public void run() { - updateNotification(false); - } - }); - } else if (ACTION_SHOW_OVERLAY.equals(action)) { - showOverlay(); - } - } - }; - - private void showOverlay() { - mWindowManager.addView(mOverlayView, mParams); - updateNotification(true); - mOverlayView.animate().alpha(1f); - } - private void hideOverlay(final Runnable endAction) { mOverlayView.animate().alpha(0f).withEndAction(new Runnable() { @Override diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java index 980cb52..571dafb 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/MockOverlay.java @@ -19,10 +19,8 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.res.Configuration; import android.graphics.Bitmap; @@ -36,8 +34,6 @@ import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.qs.MockQuickSettingsTile; -import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.utils.MockupUtils; import org.cyanogenmod.designertools.utils.NotificationUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; @@ -79,10 +75,6 @@ public void run() { } }); } - if (mReceiver != null) { - unregisterReceiver(mReceiver); - mReceiver = null; - } ((DesignerToolsApplication) getApplicationContext()).setMockOverlayOn(false); } @@ -108,11 +100,6 @@ public boolean onPreDraw() { return false; } }); - IntentFilter filter = new IntentFilter(MockQuickSettingsTile.ACTION_TOGGLE_STATE); - filter.addAction(MockQuickSettingsTile.ACTION_UNPUBLISH); - filter.addAction(ACTION_HIDE_OVERLAY); - filter.addAction(ACTION_SHOW_OVERLAY); - registerReceiver(mReceiver, filter); startForeground(NOTIFICATION_ID, getPersistentNotification(true)); } @@ -147,31 +134,6 @@ private Notification getPersistentNotification(boolean actionIsHide) { pi); } - private BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - final String action = intent.getAction(); - if (MockQuickSettingsTile.ACTION_UNPUBLISH.equals(action)) { - stopSelf(); - } else if (MockQuickSettingsTile.ACTION_TOGGLE_STATE.equals(action)) { - int state = - intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); - if (state == OnOffTileState.STATE_ON) { - stopSelf(); - } - } else if (ACTION_HIDE_OVERLAY.equals(action)) { - hideOverlay(new Runnable() { - @Override - public void run() { - updateNotification(false); - } - }); - } else if (ACTION_SHOW_OVERLAY.equals(action)) { - showOverlay(); - } - } - }; - private void showOverlay() { mWindowManager.addView(mOverlayView, mParams); updateNotification(true); diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java deleted file mode 100644 index ea31d04..0000000 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/ColorPickerQuickSettingsTile.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2016 The CyanogenMod Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.cyanogenmod.designertools.qs; - -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; -import org.cyanogenmod.designertools.R; - -import cyanogenmod.app.CMStatusBarManager; -import cyanogenmod.app.CustomTile; - -public class ColorPickerQuickSettingsTile { - private static final String TAG = ColorPickerQuickSettingsTile.class.getSimpleName(); - - public static final String ACTION_TOGGLE_STATE = - "org.cyanogenmod.designertools.action.TOGGLE_COLOR_PICKER_STATE"; - - public static final String ACTION_UNPUBLISH = - "org.cyanogenmod.designertools.action.UNPUBLISH_COLOR_PICKER_TILE"; - - public static final int TILE_ID = 5000; - - public static void publishColorPickerTile(Context context) { - publishColorPickerTile(context, OnOffTileState.STATE_OFF); - } - - public static void publishColorPickerTile(Context context, int state) { - Intent intent = new Intent(ACTION_TOGGLE_STATE); - intent.putExtra(OnOffTileState.EXTRA_STATE, state); - PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, - PendingIntent.FLAG_UPDATE_CURRENT); - int iconResId = - state == OnOffTileState.STATE_OFF ? R.drawable.ic_qs_colorpicker_off : - R.drawable.ic_qs_colorpicker_on; - CustomTile tile = new CustomTile.Builder(context) - .setOnClickIntent(pi) - .setLabel(context.getString(R.string.color_picker_qs_tile_label)) - .setIcon(iconResId) - .build(); - CMStatusBarManager.getInstance(context).publishTile(TAG, TILE_ID, tile); - ColorPickerPreferences.setColorPickerQsTileEnabled(context, true); - } - - public static void unpublishColorPickerTile(Context context) { - CMStatusBarManager.getInstance(context).removeTile(TAG, TILE_ID); - ColorPickerPreferences.setColorPickerQsTileEnabled(context, false); - Intent intent = new Intent(ColorPickerQuickSettingsTile.ACTION_UNPUBLISH); - context.sendBroadcast(intent); - } - - public static class ClickBroadcastReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (ColorPickerPreferences.getColorPickerQsTileEnabled(context, false)) { - int state = - intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); - if (state == OnOffTileState.STATE_OFF) { - publishColorPickerTile(context, OnOffTileState.STATE_ON); - LaunchUtils.startColorPickerOrRequestPermission(context); - } else { - publishColorPickerTile(context, OnOffTileState.STATE_OFF); - ColorPickerPreferences.setColorPickerActive(context, false); - } - } - } - } -} diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java deleted file mode 100644 index 11a7c93..0000000 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/GridQuickSettingsTile.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2016 The CyanogenMod Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.cyanogenmod.designertools.qs; - -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils.GridPreferences; - -import cyanogenmod.app.CMStatusBarManager; -import cyanogenmod.app.CustomTile; - -public class GridQuickSettingsTile { - private static final String TAG = GridQuickSettingsTile.class.getSimpleName(); - - public static final String ACTION_TOGGLE_STATE = - "org.cyanogenmod.designertools.action.TOGGLE_GRID_STATE"; - - public static final String ACTION_UNPUBLISH = - "org.cyanogenmod.designertools.action.UNPUBLISH_GRID_TILE"; - - public static final int TILE_ID = 1000; - - public static void publishGridTile(Context context) { - publishGridTile(context, OnOffTileState.STATE_OFF); - } - - public static void publishGridTile(Context context, int state) { - Intent intent = new Intent(ACTION_TOGGLE_STATE); - intent.putExtra(OnOffTileState.EXTRA_STATE, state); - PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, - PendingIntent.FLAG_UPDATE_CURRENT); - int iconResId = state == OnOffTileState.STATE_OFF ? R.drawable.ic_qs_grid_off : - R.drawable.ic_qs_grid_on; - CustomTile tile = new CustomTile.Builder(context) - .setOnClickIntent(pi) - .setLabel(context.getString(R.string.grid_qs_tile_label)) - .setIcon(iconResId) - .build(); - CMStatusBarManager.getInstance(context).publishTile(TAG, TILE_ID, tile); - GridPreferences.setGridQsTileEnabled(context, true); - } - - public static void unpublishGridTile(Context context) { - CMStatusBarManager.getInstance(context).removeTile(TAG, TILE_ID); - GridPreferences.setGridQsTileEnabled(context, false); - Intent intent = new Intent(GridQuickSettingsTile.ACTION_UNPUBLISH); - context.sendBroadcast(intent); - } - - public static class ClickBroadcastReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - int state = intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); - if (state == OnOffTileState.STATE_OFF) { - LaunchUtils.publishGridOverlayTile(context, OnOffTileState.STATE_ON); - LaunchUtils.launchGridOverlay(context); - } else { - LaunchUtils.publishGridOverlayTile(context, OnOffTileState.STATE_OFF); - LaunchUtils.cancelGridOverlay(context); - } - } - } -} diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java b/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java deleted file mode 100644 index 1caa681..0000000 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/MockQuickSettingsTile.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2016 The CyanogenMod Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.cyanogenmod.designertools.qs; - -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; - -import cyanogenmod.app.CMStatusBarManager; -import cyanogenmod.app.CustomTile; - -public class MockQuickSettingsTile { - private static final String TAG = MockQuickSettingsTile.class.getSimpleName(); - - public static final String ACTION_TOGGLE_STATE = - "org.cyanogenmod.designertools.action.TOGGLE_MOCK_STATE"; - - public static final String ACTION_UNPUBLISH = - "org.cyanogenmod.designertools.action.UNPUBLISH_MOCK_TILE"; - - public static final int TILE_ID = 2000; - - public static void publishMockTile(Context context) { - publishMockTile(context, OnOffTileState.STATE_OFF); - } - - public static void publishMockTile(Context context, int state) { - Intent intent = new Intent(ACTION_TOGGLE_STATE); - intent.putExtra(OnOffTileState.EXTRA_STATE, state); - PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, - PendingIntent.FLAG_UPDATE_CURRENT); - int iconResId = state == OnOffTileState.STATE_OFF ? R.drawable.ic_qs_overlay_off : - R.drawable.ic_qs_overlay_on; - CustomTile tile = new CustomTile.Builder(context) - .setOnClickIntent(pi) - .setLabel(context.getString(R.string.mock_qs_tile_label)) - .setIcon(iconResId) - .build(); - CMStatusBarManager.getInstance(context).publishTile(TAG, TILE_ID, tile); - MockPreferences.setMockQsTileEnabled(context, true); - } - - public static void unpublishMockTile(Context context) { - CMStatusBarManager.getInstance(context).removeTile(TAG, TILE_ID); - MockPreferences.setMockQsTileEnabled(context, false); - Intent intent = new Intent(MockQuickSettingsTile.ACTION_UNPUBLISH); - context.sendBroadcast(intent); - } - - public static class ClickBroadcastReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - int state = intent.getIntExtra(OnOffTileState.EXTRA_STATE, OnOffTileState.STATE_OFF); - if (state == OnOffTileState.STATE_OFF) { - LaunchUtils.publishMockOverlayTile(context, OnOffTileState.STATE_ON); - LaunchUtils.launchMockOverlay(context); - } else { - LaunchUtils.publishMockOverlayTile(context, OnOffTileState.STATE_OFF); - LaunchUtils.cancelMockOverlay(context); - } - } - } -} diff --git a/app/src/main/java/org/cyanogenmod/designertools/qs/OnOffTileState.java b/app/src/main/java/org/cyanogenmod/designertools/qs/OnOffTileState.java deleted file mode 100644 index 52d4277..0000000 --- a/app/src/main/java/org/cyanogenmod/designertools/qs/OnOffTileState.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2016 The CyanogenMod Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.cyanogenmod.designertools.qs; - -public class OnOffTileState { - public static final String EXTRA_STATE = "state"; - - public static final int STATE_OFF = 0; - public static final int STATE_ON = 1; -} diff --git a/app/src/main/java/org/cyanogenmod/designertools/receiver/BootReceiver.java b/app/src/main/java/org/cyanogenmod/designertools/receiver/BootReceiver.java index e47c1df..7e30725 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/receiver/BootReceiver.java +++ b/app/src/main/java/org/cyanogenmod/designertools/receiver/BootReceiver.java @@ -19,11 +19,7 @@ import android.content.Context; import android.content.Intent; -import org.cyanogenmod.designertools.qs.ColorPickerQuickSettingsTile; -import org.cyanogenmod.designertools.qs.GridQuickSettingsTile; -import org.cyanogenmod.designertools.qs.MockQuickSettingsTile; import org.cyanogenmod.designertools.service.ScreenshotListenerService; -import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; public class BootReceiver extends BroadcastReceiver { @@ -32,18 +28,14 @@ public BootReceiver() { @Override public void onReceive(Context context, Intent intent) { - final boolean isCm = LaunchUtils.isCyanogenMod(context); if (PreferenceUtils.GridPreferences.getGridQsTileEnabled(context, false)) { PreferenceUtils.GridPreferences.setGridOverlayActive(context, false); - if (isCm) GridQuickSettingsTile.publishGridTile(context); } if (PreferenceUtils.MockPreferences.getMockQsTileEnabled(context, false)) { PreferenceUtils.MockPreferences.setMockOverlayActive(context, false); - if (isCm) MockQuickSettingsTile.publishMockTile(context); } if (PreferenceUtils.ColorPickerPreferences.getColorPickerQsTileEnabled(context, false)) { PreferenceUtils.ColorPickerPreferences.setColorPickerActive(context, false); - if (isCm) ColorPickerQuickSettingsTile.publishColorPickerTile(context); } if (PreferenceUtils.ScreenshotPreferences.getScreenshotInfoEnabled(context, false)) { Intent newIntent = new Intent(context, ScreenshotListenerService.class); diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java index 462b2d9..af336b9 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/ScreenshotInfoService.java @@ -81,7 +81,7 @@ private Bitmap getInfoPane() { DateFormat.getTimeInstance().format(date)); String device = Build.MODEL; String codeName = Build.DEVICE; - String build = getCmVersionString(this); + String build = Build.ID; String density = getDensityString(); String kernelVersion = getFormattedKernelVersion(); @@ -221,32 +221,4 @@ private void saveModifiedScreenshot(Bitmap screenshot, Bitmap infoPane, Uri uri) } newBmp.recycle(); } - - private String getCmVersionString(Context context) { - if (LaunchUtils.isCyanogenMod(context)) { - ClassLoader cl = context.getClassLoader(); - Class SystemProperties = null; - try { - SystemProperties = cl.loadClass("android.os.SystemProperties"); - //Parameters Types - Class[] paramTypes = new Class[1]; - paramTypes[0] = String.class; - - Method get = SystemProperties.getMethod("get", paramTypes); - - //Parameters - Object[] params = new Object[1]; - params[0] = "ro.cm.version"; - - return (String) get.invoke(SystemProperties, params); - } catch (ClassNotFoundException | - NoSuchMethodException | - IllegalAccessException | - InvocationTargetException e) { - /* don't care, will fallback to Build.ID */ - } - } - - return Build.ID; - } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java index d01243f..c304dac 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/ColorPickerTileService.java @@ -15,18 +15,14 @@ */ package org.cyanogenmod.designertools.service.qs; -import android.annotation.TargetApi; import android.graphics.drawable.Icon; -import android.os.Build; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.utils.LaunchUtils; -@TargetApi(Build.VERSION_CODES.N) public class ColorPickerTileService extends TileService { public ColorPickerTileService() { super(); @@ -60,10 +56,8 @@ public void onClick() { super.onClick(); boolean isOn = ((DesignerToolsApplication) getApplicationContext()).getColorPickerOn(); if (isOn) { - LaunchUtils.publishColorPickerTile(this, OnOffTileState.STATE_OFF); LaunchUtils.cancelColorPickerOverlay(this); } else { - LaunchUtils.publishColorPickerTile(this, OnOffTileState.STATE_ON); LaunchUtils.launchColorPickerOverlay(this); } updateTile(!isOn); diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java index ef1ae3a..9016b0d 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/GridOverlayTileService.java @@ -15,9 +15,7 @@ */ package org.cyanogenmod.designertools.service.qs; -import android.annotation.TargetApi; import android.graphics.drawable.Icon; -import android.os.Build; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; @@ -25,7 +23,6 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.utils.LaunchUtils; -@TargetApi(Build.VERSION_CODES.N) public class GridOverlayTileService extends TileService { public GridOverlayTileService() { super(); diff --git a/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java b/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java index 0378e9c..3500dfc 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java +++ b/app/src/main/java/org/cyanogenmod/designertools/service/qs/MockOverlayTileService.java @@ -15,9 +15,7 @@ */ package org.cyanogenmod.designertools.service.qs; -import android.annotation.TargetApi; import android.graphics.drawable.Icon; -import android.os.Build; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; @@ -25,7 +23,6 @@ import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.utils.LaunchUtils; -@TargetApi(Build.VERSION_CODES.N) public class MockOverlayTileService extends TileService { public MockOverlayTileService() { super(); @@ -59,9 +56,9 @@ public void onClick() { super.onClick(); boolean isOn = ((DesignerToolsApplication) getApplicationContext()).getMockOverlayOn(); if (isOn) { - LaunchUtils.cancelMockOverlayOrUnpublishTile(this); + LaunchUtils.cancelMockOverlay(this); } else { - LaunchUtils.lauchMockPverlayOrPublishTile(this, 0); + LaunchUtils.launchMockOverlay(this); } updateTile(!isOn); } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java index 8e9bf83..2fa6db8 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ColorPickerCardFragment.java @@ -25,9 +25,7 @@ import android.widget.CompoundButton; import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.utils.LaunchUtils; -import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; public class ColorPickerCardFragment extends DesignerToolCardFragment { private static final int REQUEST_OVERLAY_PERMISSION = 0x42; @@ -83,12 +81,9 @@ private void isEnabled() { private void enableFeature(boolean enable) { if (enable) { - LaunchUtils.lauchColorPickerOrPublishTile(getContext(), - ColorPickerPreferences.getColorPickerActive(getContext(), false) - ? OnOffTileState.STATE_ON - : OnOffTileState.STATE_OFF); + LaunchUtils.launchColorPickerOverlay(getContext()); } else { - LaunchUtils.cancelColorPickerOrUnpublishTile(getContext()); + LaunchUtils.cancelColorPickerOverlay(getContext()); } } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolsActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolsActivity.java index 2afc3ce..5fcfad5 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolsActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/DesignerToolsActivity.java @@ -30,10 +30,6 @@ public class DesignerToolsActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_designer_tools); - if (!LaunchUtils.isCyanogenMod(this)) { - TextView tv = findViewById(R.id.qs_tiles_section); - tv.setText(R.string.overlays_section_text); - } View headerGlyph = findViewById(R.id.header_glyph); if (headerGlyph != null) { headerGlyph.setOnClickListener(mGlyphClickListener); diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java index 72728cc..8a9718b 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/GridOverlayCardFragment.java @@ -32,7 +32,6 @@ import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.utils.ColorUtils; import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.PreferenceUtils; @@ -133,12 +132,9 @@ protected int getCardStyleResourceId() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { - LaunchUtils.lauchGridOverlayOrPublishTile(getContext(), - GridPreferences.getGridOverlayActive(getContext(), false) - ? OnOffTileState.STATE_ON - : OnOffTileState.STATE_OFF); + LaunchUtils.launchGridOverlay(getContext()); } else { - LaunchUtils.cancelGridOverlayOrUnpublishTile(getContext()); + LaunchUtils.cancelGridOverlay(getContext()); } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java b/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java index a5cef8c..75ee76b 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/MockupOverlayCardFragmnt.java @@ -32,7 +32,6 @@ import org.cyanogenmod.designertools.R; -import org.cyanogenmod.designertools.qs.OnOffTileState; import org.cyanogenmod.designertools.utils.ImageUtils; import org.cyanogenmod.designertools.utils.LaunchUtils; import org.cyanogenmod.designertools.utils.MockupUtils; @@ -121,12 +120,9 @@ protected int getCardStyleResourceId() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { - LaunchUtils.lauchMockPverlayOrPublishTile(getContext(), - MockPreferences.getMockOverlayActive(getContext(), false) - ? OnOffTileState.STATE_ON - : OnOffTileState.STATE_OFF); + LaunchUtils.launchMockOverlay(getContext()); } else { - LaunchUtils.cancelMockOverlayOrUnpublishTile(getContext()); + LaunchUtils.cancelMockOverlay(getContext()); } } diff --git a/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java b/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java index 8cd8614..6aadf22 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java +++ b/app/src/main/java/org/cyanogenmod/designertools/utils/LaunchUtils.java @@ -18,15 +18,11 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.os.Build; import org.cyanogenmod.designertools.DesignerToolsApplication; import org.cyanogenmod.designertools.overlays.ColorPickerOverlay; import org.cyanogenmod.designertools.overlays.GridOverlay; import org.cyanogenmod.designertools.overlays.MockOverlay; -import org.cyanogenmod.designertools.qs.ColorPickerQuickSettingsTile; -import org.cyanogenmod.designertools.qs.GridQuickSettingsTile; -import org.cyanogenmod.designertools.qs.MockQuickSettingsTile; import org.cyanogenmod.designertools.ui.ScreenRecordRequestActivity; import org.cyanogenmod.designertools.ui.StartOverlayActivity; import org.cyanogenmod.designertools.utils.PreferenceUtils.ColorPickerPreferences; @@ -34,30 +30,10 @@ import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; public class LaunchUtils { - public static boolean isCyanogenMod(Context context) { - return context.getPackageManager().hasSystemFeature("org.cyanogenmod.theme"); - } - - public static void publishGridOverlayTile(Context context, int state) { - GridQuickSettingsTile.publishGridTile(context, state); - } - public static void launchGridOverlay(Context context) { startOverlayActivity(context, StartOverlayActivity.GRID_OVERLAY); } - public static void lauchGridOverlayOrPublishTile(Context context, int state) { - if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - publishGridOverlayTile(context, state); - } else { - launchGridOverlay(context); - } - } - - public static void unpublishGridOverlayTile(Context context) { - GridQuickSettingsTile.unpublishGridTile(context); - } - public static void cancelGridOverlay(Context context) { Intent newIntent = new Intent(context, GridOverlay.class); context.stopService(newIntent); @@ -65,35 +41,10 @@ public static void cancelGridOverlay(Context context) { GridPreferences.setGridQsTileEnabled(context, false); } - public static void cancelGridOverlayOrUnpublishTile(Context context) { - if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - unpublishGridOverlayTile(context); - GridQuickSettingsTile.unpublishGridTile(context); - } else { - cancelGridOverlay(context); - } - } - - public static void publishMockOverlayTile(Context context, int state) { - MockQuickSettingsTile.publishMockTile(context, state); - } - public static void launchMockOverlay(Context context) { startOverlayActivity(context, StartOverlayActivity.MOCK_OVERLAY); } - public static void lauchMockPverlayOrPublishTile(Context context, int state) { - if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - publishMockOverlayTile(context, state); - } else { - launchMockOverlay(context); - } - } - - public static void unpublishMockOverlayTile(Context context) { - MockQuickSettingsTile.unpublishMockTile(context); - } - public static void cancelMockOverlay(Context context) { Intent newIntent = new Intent(context, MockOverlay.class); context.stopService(newIntent); @@ -101,34 +52,10 @@ public static void cancelMockOverlay(Context context) { MockPreferences.setMockQsTileEnabled(context, false); } - public static void cancelMockOverlayOrUnpublishTile(Context context) { - if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - unpublishMockOverlayTile(context); - } else { - cancelMockOverlay(context); - } - } - - public static void publishColorPickerTile(Context context, int state) { - ColorPickerQuickSettingsTile.publishColorPickerTile(context, state); - } - public static void launchColorPickerOverlay(Context context) { startOverlayActivity(context, StartOverlayActivity.COLOR_PICKER_OVERLAY); } - public static void lauchColorPickerOrPublishTile(Context context, int state) { - if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - publishColorPickerTile(context, state); - } else { - launchColorPickerOverlay(context); - } - } - - public static void unpublishColorPickerTile(Context context) { - ColorPickerQuickSettingsTile.unpublishColorPickerTile(context); - } - public static void cancelColorPickerOverlay(Context context) { Intent newIntent = new Intent(context, ColorPickerOverlay.class); context.stopService(newIntent); @@ -136,14 +63,6 @@ public static void cancelColorPickerOverlay(Context context) { ColorPickerPreferences.setColorPickerQsTileEnabled(context, false); } - public static void cancelColorPickerOrUnpublishTile(Context context) { - if (isCyanogenMod(context) && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - unpublishColorPickerTile(context); - } else { - cancelColorPickerOverlay(context); - } - } - public static void startColorPickerOrRequestPermission(Context context) { DesignerToolsApplication app = (DesignerToolsApplication) context.getApplicationContext(); diff --git a/app/src/main/res/layout-land/activity_designer_tools.xml b/app/src/main/res/layout-land/activity_designer_tools.xml index 432a7c1..e68571d 100644 --- a/app/src/main/res/layout-land/activity_designer_tools.xml +++ b/app/src/main/res/layout-land/activity_designer_tools.xml @@ -33,7 +33,7 @@ android:layout_marginStart="16dp" android:layout_marginBottom="8dp" android:textSize="16sp" - android:text="@string/qs_section_text"/> + android:text="@string/overlays_section_text"/> + android:text="@string/overlays_section_text"/> + android:text="@string/overlays_section_text"/> Date: Fri, 21 Oct 2022 13:40:29 -0700 Subject: [PATCH 34/42] make gradlew executable --- gradlew | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 gradlew diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 From c419812d3cd99a64b981f85666469965e17da051 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Fri, 21 Oct 2022 13:49:45 -0700 Subject: [PATCH 35/42] remove deleted receivers from manifest --- app/src/main/AndroidManifest.xml | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4559b80..d4aa178 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ - @@ -54,30 +53,6 @@ android:exported="false" android:excludeFromRecents="true" /> - - - - - - - - - - - - - - - - - - Date: Fri, 21 Oct 2022 14:20:21 -0700 Subject: [PATCH 36/42] make `gradlew build` happy --- .../cyanogenmod/designertools/overlays/ColorPickerOverlay.java | 2 ++ .../org/cyanogenmod/designertools/widget/VerticalSeekBar.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java index 5929f74..73840c6 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java +++ b/app/src/main/java/org/cyanogenmod/designertools/overlays/ColorPickerOverlay.java @@ -18,6 +18,7 @@ import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; +import android.annotation.SuppressLint; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; @@ -383,6 +384,7 @@ public Bitmap getScreenBitmapRegion(Image image, Rect region) { return bmp; } + @SuppressLint("WrongConstant") private void setupMediaProjection() { final DesignerToolsApplication app = (DesignerToolsApplication) getApplication(); final DisplayMetrics dm = getResources().getDisplayMetrics(); diff --git a/app/src/main/java/org/cyanogenmod/designertools/widget/VerticalSeekBar.java b/app/src/main/java/org/cyanogenmod/designertools/widget/VerticalSeekBar.java index ab31b50..a450020 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/widget/VerticalSeekBar.java +++ b/app/src/main/java/org/cyanogenmod/designertools/widget/VerticalSeekBar.java @@ -3,6 +3,7 @@ */ package org.cyanogenmod.designertools.widget; +import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; import android.graphics.Rect; @@ -12,6 +13,7 @@ import android.view.MotionEvent; import android.widget.SeekBar; +@SuppressLint("AppCompatCustomView") public class VerticalSeekBar extends SeekBar { public VerticalSeekBar(Context context) { From d1d8739817cbc1898ac46aeeb918b867ccbf0bf2 Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Mon, 24 Oct 2022 10:08:49 -0700 Subject: [PATCH 37/42] Show dialog before request all files access --- .../ui/ScreenshotCardFragment.java | 24 ++- app/src/main/res/values/strings.xml | 165 +++++++++--------- 2 files changed, 107 insertions(+), 82 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java index dbfefa5..6475b95 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java @@ -16,6 +16,7 @@ package org.cyanogenmod.designertools.ui; import android.Manifest; +import android.app.AlertDialog; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.ColorStateList; @@ -81,9 +82,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); } else { - Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - getApplicationContext().startActivity(intent); + showReasoningDialog(); } } } else { @@ -99,4 +98,23 @@ private boolean hasRequiredPermissions() { return Environment.isExternalStorageManager(); } } + + private void requestAccessAllFilesPermission() { + Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getApplicationContext().startActivity(intent); + } + + private void showReasoningDialog() { + AlertDialog.Builder builder = + new AlertDialog.Builder(getActivity(), android.R.style.Theme_Material_Light_Dialog_Alert); + builder.setTitle(R.string.dialog_request_file_permission_title) + .setMessage(R.string.dialog_request_file_permission_message) + .setPositiveButton(R.string.dialog_request_file_permission_grant, (dialog, which) -> { + requestAccessAllFilesPermission(); + }) + .setNegativeButton(R.string.dialog_request_file_permission_deny, (dialog, which) -> {}) + .setIcon(R.drawable.ic_launcher) + .show(); + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 685edb7..edc361b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,79 +1,86 @@ - - - Designer Tools - - Grid overlay - On-screen grids help you check your layouts for misaligned elements and inconsistent spacing across your app. Use the default 8dp grid or a custom size of your choice. - - Mockup overlay - Overlaying a mockup gives you a live preview of the screen layout as you’re working. - - Color picker - Check on-screen colors at the pixel level by dragging the loupe dot around. - - Screenshot details - Append device information to every screenshot you take. Record device name, build details, screen specs, and more. - - Quick settings tiles - Overlays - Functions - - Line colors - Include keylines - Include custom grid size - - Current mockup: - Portait - Landscape - Reset mockups - %d %% Opacity - - - Grid - Mock overlay - Screenshot - Color picker - - Accept - Cancel - Grid and keyline colors - - Grid - Keyline - - - Screenshot Info - Device - Code Name - Build - Screen Size - Screen Density - - Press to hide color picker - Press to show color picker - - Press to hide grid - Press to show grid - - Press to hide mockup - Press to show mockup - - Screenshot info enabled - - Color value copied to clipboard - - + + + Designer Tools + + Grid overlay + On-screen grids help you check your layouts for misaligned elements and inconsistent spacing across your app. Use the default 8dp grid or a custom size of your choice. + + Mockup overlay + Overlaying a mockup gives you a live preview of the screen layout as you’re working. + + Color picker + Check on-screen colors at the pixel level by dragging the loupe dot around. + + Screenshot details + Append device information to every screenshot you take. Record device name, build details, screen specs, and more. + + Quick settings tiles + Overlays + Functions + + Line colors + Include keylines + Include custom grid size + + Current mockup: + Portait + Landscape + Reset mockups + %d %% Opacity + + + Grid + Mock overlay + Screenshot + Color picker + + Accept + Cancel + Grid and keyline colors + + Grid + Keyline + + + Screenshot Info + Device + Code Name + Build + Screen Size + Screen Density + + Press to hide color picker + Press to show color picker + + Press to hide grid + Press to show grid + + Press to hide mockup + Press to show mockup + + Screenshot info enabled + + Color value copied to clipboard + + File Access Required + + Designer Tools requires \'All files access\' in order to write info to screenshots. Clicking grant will take you to the \'All files access\' settings where you can then enable access for Designer Tools. + + Let\'s go! + I\'ll pass + + From 0a9ce507f2d9c599eefc274de6134afa98d17b3c Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Mon, 24 Oct 2022 12:09:54 -0700 Subject: [PATCH 38/42] Show dialog before requesting overlay permission --- .../ui/StartOverlayActivity.java | 31 ++++++++++++++++--- app/src/main/res/values/strings.xml | 10 ++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java index 0761561..8844b0b 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java @@ -16,11 +16,13 @@ package org.cyanogenmod.designertools.ui; import android.app.Activity; +import android.app.AlertDialog; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; +import org.cyanogenmod.designertools.R; import org.cyanogenmod.designertools.overlays.GridOverlay; import org.cyanogenmod.designertools.overlays.MockOverlay; import org.cyanogenmod.designertools.utils.LaunchUtils; @@ -28,7 +30,7 @@ import org.cyanogenmod.designertools.utils.PreferenceUtils.MockPreferences; public class StartOverlayActivity extends Activity { - private static final int REQUEST_OVERLAY_PERMSSISION = 42; + private static final int REQUEST_OVERLAY_PERMISSION = StartOverlayActivity.class.hashCode(); public static final String EXTRA_OVERLAY_TYPE = "overlayType"; public static final int GRID_OVERLAY = 0; @@ -47,9 +49,7 @@ protected void onCreate(Bundle savedInstanceState) { startOverlayService(mOverlayType); finish(); } else { - Intent newIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, - Uri.parse("package:" + getPackageName())); - startActivityForResult(newIntent, REQUEST_OVERLAY_PERMSSISION); + showReasoningDialog(); } } else { finish(); @@ -58,7 +58,7 @@ protected void onCreate(Bundle savedInstanceState) { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_OVERLAY_PERMSSISION) { + if (requestCode == REQUEST_OVERLAY_PERMISSION) { if (Settings.canDrawOverlays(this)) { startOverlayService(mOverlayType); } @@ -86,4 +86,25 @@ private void startOverlayService(int overlayType) { break; } } + + private void requestOverlayPermission() { + Intent newIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:" + getPackageName())); + startActivityForResult(newIntent, REQUEST_OVERLAY_PERMISSION); + } + + private void showReasoningDialog() { + AlertDialog.Builder builder = + new AlertDialog.Builder(this, android.R.style.Theme_Material_Light_Dialog_Alert); + builder.setTitle(R.string.dialog_request_overlay_permission_title) + .setMessage(R.string.dialog_request_overlay_permission_message) + .setPositiveButton(R.string.dialog_request_overlay_permission_grant, (dialog, which) -> { + requestOverlayPermission(); + }) + .setNegativeButton(R.string.dialog_request_overlay_permission_deny, (dialog, which) -> { + finish(); + }) + .setIcon(R.drawable.ic_launcher) + .show(); + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index edc361b..31fd77c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -78,9 +78,15 @@ File Access Required - Designer Tools requires \'All files access\' in order to write info to screenshots. Clicking grant will take you to the \'All files access\' settings where you can then enable access for Designer Tools. + This feature requires \'All files access\' in order to write screenshot info.\n\nWould you like to enable this now? Let\'s go! - I\'ll pass + No thanks + Display over other apps + + This feature requires permission to display over other apps.\n\nWould you like to enable this now? + + Let\'s go! + No thanks From a71ba0a6289e55a2f2089785948da75ab8e4cf84 Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Tue, 25 Oct 2022 10:03:46 -0700 Subject: [PATCH 39/42] use appcompat themes --- .../ui/ScreenshotCardFragment.java | 2 +- .../ui/StartOverlayActivity.java | 2 +- app/src/main/res/values/styles.xml | 28 +++++++++++-------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java index 6475b95..92e31a4 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/ScreenshotCardFragment.java @@ -107,7 +107,7 @@ private void requestAccessAllFilesPermission() { private void showReasoningDialog() { AlertDialog.Builder builder = - new AlertDialog.Builder(getActivity(), android.R.style.Theme_Material_Light_Dialog_Alert); + new AlertDialog.Builder(getActivity(), R.style.AlertDialog); builder.setTitle(R.string.dialog_request_file_permission_title) .setMessage(R.string.dialog_request_file_permission_message) .setPositiveButton(R.string.dialog_request_file_permission_grant, (dialog, which) -> { diff --git a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java index 8844b0b..f22547c 100644 --- a/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java +++ b/app/src/main/java/org/cyanogenmod/designertools/ui/StartOverlayActivity.java @@ -95,7 +95,7 @@ private void requestOverlayPermission() { private void showReasoningDialog() { AlertDialog.Builder builder = - new AlertDialog.Builder(this, android.R.style.Theme_Material_Light_Dialog_Alert); + new AlertDialog.Builder(this, R.style.AlertDialog); builder.setTitle(R.string.dialog_request_overlay_permission_title) .setMessage(R.string.dialog_request_overlay_permission_message) .setPositiveButton(R.string.dialog_request_overlay_permission_grant, (dialog, which) -> { diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d80229d..74e2200 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -17,15 +17,14 @@ - - - From 4fd9cfeff20f41dc4c712b8fc1645c7f4eca90ba Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Tue, 25 Oct 2022 10:20:34 -0700 Subject: [PATCH 40/42] increase radius of card backgrounds --- app/src/main/res/drawable/card_background.xml | 2 +- app/src/main/res/layout/card_layout.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/drawable/card_background.xml b/app/src/main/res/drawable/card_background.xml index 1619458..aee130c 100644 --- a/app/src/main/res/drawable/card_background.xml +++ b/app/src/main/res/drawable/card_background.xml @@ -18,6 +18,6 @@ android:shape="rectangle"> + android:radius="16dp"/> \ No newline at end of file diff --git a/app/src/main/res/layout/card_layout.xml b/app/src/main/res/layout/card_layout.xml index 0e736ce..37117dc 100644 --- a/app/src/main/res/layout/card_layout.xml +++ b/app/src/main/res/layout/card_layout.xml @@ -26,7 +26,7 @@ android:elevation="2dp" android:clipToPadding="false" android:background="@drawable/card_background" - android:outlineProvider="bounds"> + android:outlineProvider="background"> From 84cc8285cf8aeff58de2388468bb813b541fd327 Mon Sep 17 00:00:00 2001 From: Clark Scheff Date: Tue, 25 Oct 2022 21:34:25 -0700 Subject: [PATCH 41/42] version bump to 2.2.2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a01f35a..d58adb4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.scheffsblend.designertools" minSdkVersion 24 targetSdkVersion 33 - versionCode 5 - versionName "2.2.1" + versionCode 6 + versionName "2.2.2" setProperty("archivesBaseName", "DesignerTools-$versionName") } buildTypes { From 0c88d6b2ca894560f2dea357b06f72166584c0b5 Mon Sep 17 00:00:00 2001 From: 0xD34D Date: Wed, 26 Oct 2022 10:45:06 -0700 Subject: [PATCH 42/42] update .gitignore --- .gitignore | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index c4f839e..7af5853 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,34 @@ -*.iml +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ *.apk -.gradle -/local.properties -/.idea/workspace.xml -/.idea/vcs.xml -/.idea/libraries -.DS_Store -/build -/captures +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof +