diff --git a/res/layout/item_dir_grid.xml b/res/layout/item_dir_grid.xml index da923e94d21ab80eb18a2286b9c5a583a22ca2a6..4de486a3352c106ca501ff9ffeafac57306ae4d3 100644 --- a/res/layout/item_dir_grid.xml +++ b/res/layout/item_dir_grid.xml @@ -22,6 +22,7 @@ when touch mode is not enable. So, if you, heroic engineer of the future, decide to rip these out, please be sure to check out focus and keyboards. --> #ff254FAE @color/tool_bar_color - @color/tool_bar_color + + @*android:color/accent_device_default + @*android:color/accent_device_default @*android:color/accent_device_default_dark @*android:color/white diff --git a/src/com/android/documentsui/ActionModeController.java b/src/com/android/documentsui/ActionModeController.java index dc453b775e2ed34d32796fe48c66c1dbf2acb5e8..c2fc860e01a1bff748b2dcdf6538a5f79ff3ce4b 100644 --- a/src/com/android/documentsui/ActionModeController.java +++ b/src/com/android/documentsui/ActionModeController.java @@ -91,6 +91,8 @@ public class ActionModeController extends SelectionObserver R.plurals.elements_selected, mSelected.size()); mActionMode.setTitle(title); mActivity.getWindow().setTitle(title); + + } } diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java index a5784de277c2a506a49d99285cab6f95009ab261..cb745078982fbac27d8fbaef533cc84a7fcb017f 100644 --- a/src/com/android/documentsui/BaseActivity.java +++ b/src/com/android/documentsui/BaseActivity.java @@ -26,7 +26,10 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ProviderInfo; +import android.content.res.TypedArray; +import android.graphics.drawable.ColorDrawable; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.MessageQueue.IdleHandler; import android.preference.PreferenceManager; @@ -35,10 +38,13 @@ import android.support.annotation.CallSuper; import android.support.annotation.LayoutRes; import android.support.annotation.VisibleForTesting; import android.util.Log; +import android.util.TypedValue; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.Toolbar; import com.android.documentsui.AbstractActionHandler.CommonAddons; @@ -71,6 +77,7 @@ import java.util.List; import javax.annotation.Nullable; + public abstract class BaseActivity extends Activity implements CommonAddons, NavigationViewManager.Environment { @@ -101,6 +108,8 @@ public abstract class BaseActivity private long mStartTime; private PreferencesMonitor mPreferencesMonitor; + private Toolbar toolbar; + public static int accentColor; public BaseActivity(@LayoutRes int layoutId, String tag) { mLayoutId = layoutId; @@ -140,7 +149,7 @@ public abstract class BaseActivity mProviders = DocumentsApplication.getProvidersCache(this); mDocs = DocumentsAccess.create(this); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + toolbar = (Toolbar) findViewById(R.id.toolbar); setActionBar(toolbar); Breadcrumb breadcrumb = @@ -200,6 +209,8 @@ public abstract class BaseActivity // Base classes must update result in their onCreate. setResult(Activity.RESULT_CANCELED); + + accentColor=fetchAccentColor(); } public void onPreferenceChanged(String pref) { @@ -675,4 +686,36 @@ public abstract class BaseActivity */ void onDirectoryLoaded(@Nullable Uri uri); } + + /* + * get Accent color from OS + * */ + + private int fetchAccentColor() { + TypedValue typedValue = new TypedValue(); + TypedArray a = this.obtainStyledAttributes(typedValue.data, new int[] { R.attr.colorAccent }); + int color = a.getColor(0, 0); + a.recycle(); + Log.e("TAG", "accent Colour #"+Integer.toHexString(color)); + //toolbar change color to accent color + toolbar.setBackgroundColor(color); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(darkenColor(color)); + } + + return color; + } + + + int darkenColor(int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } + } diff --git a/src/com/android/documentsui/DrawerController.java b/src/com/android/documentsui/DrawerController.java index 1a69363f16038d67096a4f783e2c70a4767ad717..4e3f14ff18ef1d7bddac271e23764a4366856e0b 100644 --- a/src/com/android/documentsui/DrawerController.java +++ b/src/com/android/documentsui/DrawerController.java @@ -17,14 +17,18 @@ package com.android.documentsui; import static com.android.documentsui.base.SharedMinimal.DEBUG; +import static com.android.documentsui.files.LauncherActivity.ACCENT_COLOR; import android.annotation.IntDef; import android.app.Activity; +import android.content.res.TypedArray; import android.support.annotation.ColorRes; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout.DrawerListener; import android.util.Log; +import android.util.TypedValue; +import android.view.ContextThemeWrapper; import android.view.View; import android.widget.Toolbar; @@ -40,6 +44,8 @@ import java.lang.annotation.RetentionPolicy; */ public abstract class DrawerController implements DrawerListener { public static final String TAG = "DrawerController"; + private static int accentColor; + public abstract void update(); public abstract void setOpen(boolean open); @@ -51,7 +57,7 @@ public abstract class DrawerController implements DrawerListener { * Returns a controller suitable for {@code Layout}. */ public static DrawerController create(Activity activity, ActivityConfig activityConfig) { - + accentColor=fetchAccentColor(activity); DrawerLayout layout = (DrawerLayout) activity.findViewById(R.id.drawer_layout); if (layout == null) { @@ -61,6 +67,11 @@ public abstract class DrawerController implements DrawerListener { View drawer = activity.findViewById(R.id.drawer_roots); Toolbar toolbar = (Toolbar) activity.findViewById(R.id.roots_toolbar); + + if(accentColor!=0){ + toolbar.setBackgroundColor(accentColor); + } + drawer.getLayoutParams().width = calculateDrawerWidth(activity); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( @@ -73,6 +84,8 @@ public abstract class DrawerController implements DrawerListener { return new RuntimeDrawerController(layout, drawer, toggle, toolbar, activityConfig); } + + /** * Returns a controller suitable for {@code Layout}. */ @@ -134,9 +147,17 @@ public abstract class DrawerController implements DrawerListener { public void setDropTargetHighlight(View v, boolean highlight) { assert (v.getId() == R.id.drawer_edge); - @ColorRes int id = highlight ? R.color.item_doc_background_selected : - android.R.color.transparent; - v.setBackgroundColor(id); +// @ColorRes int id = highlight ? R.color.item_doc_background_selected : +// android.R.color.transparent; + if(accentColor!=0){ + @ColorRes int id = highlight ? accentColor : android.R.color.transparent; + v.setBackgroundColor(id); + } + else { + @ColorRes int id = highlight ? R.color.item_doc_background_selected : android.R.color.transparent; + v.setBackgroundColor(id); + } + } @Override @@ -247,4 +268,21 @@ public abstract class DrawerController implements DrawerListener { @Override public void onDrawerStateChanged(int newState) {} } + + /* + * get Accent color from OS + * */ + + private static int fetchAccentColor(Activity activity) { + TypedValue typedValue = new TypedValue(); + + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(activity, android.R.style.Theme_DeviceDefault_Light); + contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, + typedValue, true); + int color = typedValue.data; + a.recycle(); + Log.e("TAG", "accent Colour #"+Integer.toHexString(color)); + //toolbar change color to accent color + return color; + } } diff --git a/src/com/android/documentsui/dirlist/DirectoryItemAnimator.java b/src/com/android/documentsui/dirlist/DirectoryItemAnimator.java index d769f7fda75eec4cc11d88c6cbac04c682922fa1..a32f520c197e4290650875b8d8c14ea2be435282 100644 --- a/src/com/android/documentsui/dirlist/DirectoryItemAnimator.java +++ b/src/com/android/documentsui/dirlist/DirectoryItemAnimator.java @@ -31,6 +31,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import static com.android.documentsui.files.LauncherActivity.ACCENT_COLOR; + /** * Performs change animations on Items in DirectoryFragment's RecyclerView. This class overrides * the way selection animations are normally performed - instead of cross fading the old Item with a @@ -46,7 +48,8 @@ class DirectoryItemAnimator extends DefaultItemAnimator { public DirectoryItemAnimator(Context context) { mDefaultColor = context.getResources().getColor(R.color.item_doc_background); - mSelectedColor = context.getResources().getColor(R.color.item_doc_background_selected); + // mSelectedColor = context.getResources().getColor(R.color.item_doc_background_selected); + mSelectedColor = Integer.valueOf(ACCENT_COLOR); } @Override diff --git a/src/com/android/documentsui/dirlist/GridDirectoryHolder.java b/src/com/android/documentsui/dirlist/GridDirectoryHolder.java index 5d029572109661033bb1ff2a89bafb73227b784b..eb9764b210bd5b40a6f522452c293c45d1ffa2ce 100644 --- a/src/com/android/documentsui/dirlist/GridDirectoryHolder.java +++ b/src/com/android/documentsui/dirlist/GridDirectoryHolder.java @@ -25,9 +25,12 @@ import android.provider.DocumentsContract.Document; import android.view.MotionEvent; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; +import com.android.documentsui.BaseActivity; import com.android.documentsui.R; +import com.android.documentsui.prefs.BackupAgent; final class GridDirectoryHolder extends DocumentHolder { @@ -35,13 +38,17 @@ final class GridDirectoryHolder extends DocumentHolder { private final ImageView mIconCheck; private final ImageView mIconMime; + private final LinearLayout mlayout_grid_item; + + private Context context; public GridDirectoryHolder(Context context, ViewGroup parent) { super(context, parent, R.layout.item_dir_grid); - + this.context=context; mTitle = (TextView) itemView.findViewById(android.R.id.title); mIconMime = (ImageView) itemView.findViewById(R.id.icon_mime_sm); mIconCheck = (ImageView) itemView.findViewById(R.id.icon_check); + mlayout_grid_item=(LinearLayout)itemView.findViewById(R.id.layout_grid_item); } @Override @@ -56,6 +63,17 @@ final class GridDirectoryHolder extends DocumentHolder { mIconCheck.setAlpha(checkAlpha); mIconMime.setAlpha(1f - checkAlpha); } + + if(selected){ + mlayout_grid_item.setBackgroundColor(BaseActivity.accentColor); + mTitle.setTextColor(context.getResources().getColor(R.color.window_background)); + mIconCheck.setColorFilter(context.getResources().getColor(R.color.window_background), android.graphics.PorterDuff.Mode.SRC_IN); + } + else { + mlayout_grid_item.setBackgroundColor(context.getResources().getColor(R.color.menu_search_background)); + mTitle.setTextColor(context.getResources().getColor(R.color.item_title)); + + } } @Override diff --git a/src/com/android/documentsui/dirlist/ListDocumentHolder.java b/src/com/android/documentsui/dirlist/ListDocumentHolder.java index f97410af1e7fbdfef7c17afde2ea0a93b1f0499b..6024b6aedce122c41d1f1627896225b8cfc1e5f5 100644 --- a/src/com/android/documentsui/dirlist/ListDocumentHolder.java +++ b/src/com/android/documentsui/dirlist/ListDocumentHolder.java @@ -30,6 +30,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import com.android.documentsui.BaseActivity; import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Lookup; @@ -53,11 +54,13 @@ final class ListDocumentHolder extends DocumentHolder { private final Lookup mFileTypeLookup; // This is used in as a convenience in our bind method. private final DocumentInfo mDoc; + private final LinearLayout layout_list_item; + private final Context context; public ListDocumentHolder(Context context, ViewGroup parent, IconHelper iconHelper, Lookup fileTypeLookup) { super(context, parent, R.layout.item_doc_list); - + this.context=context; mIconLayout = itemView.findViewById(android.R.id.icon); mIconMime = (ImageView) itemView.findViewById(R.id.icon_mime); mIconThumb = (ImageView) itemView.findViewById(R.id.icon_thumb); @@ -69,6 +72,7 @@ final class ListDocumentHolder extends DocumentHolder { mType = (TextView) itemView.findViewById(R.id.file_type); // Warning: mDetails view doesn't exists in layout-sw720dp-land layout mDetails = (LinearLayout) itemView.findViewById(R.id.line2); + layout_list_item = (LinearLayout) itemView.findViewById(R.id.layout_list_item); mIconHelper = iconHelper; mFileTypeLookup = fileTypeLookup; @@ -101,6 +105,16 @@ final class ListDocumentHolder extends DocumentHolder { mIconMime.setAlpha(1f - checkAlpha); mIconThumb.setAlpha(1f - checkAlpha); } + + if(selected){ + layout_list_item.setBackgroundColor(BaseActivity.accentColor); + mTitle.setTextColor(context.getResources().getColor(R.color.window_background)); + mIconCheck.setColorFilter(context.getResources().getColor(R.color.window_background), android.graphics.PorterDuff.Mode.SRC_IN); + } + else { + layout_list_item.setBackgroundColor(context.getResources().getColor(R.color.menu_search_background)); + mTitle.setTextColor(context.getResources().getColor(R.color.item_title)); + } } @Override diff --git a/src/com/android/documentsui/files/LauncherActivity.java b/src/com/android/documentsui/files/LauncherActivity.java index f14be5ae7a4a70b5f0614a4f09459dd875148024..ef086eb74f67ece3e45ec3755715aadfffdc4acf 100644 --- a/src/com/android/documentsui/files/LauncherActivity.java +++ b/src/com/android/documentsui/files/LauncherActivity.java @@ -23,11 +23,14 @@ import android.app.ActivityManager; import android.app.ActivityManager.AppTask; import android.content.Context; import android.content.Intent; +import android.content.res.TypedArray; +import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; import android.provider.DocumentsContract; import android.support.annotation.Nullable; import android.util.Log; +import android.util.TypedValue; import com.android.documentsui.R; @@ -55,14 +58,20 @@ public class LauncherActivity extends Activity { private static final String[] PERSISTENT_BOOLEAN_EXTRAS = { DocumentsContract.EXTRA_SHOW_ADVANCED }; + public static int ACCENT_COLOR; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ACCENT_COLOR=fetchAccentColor(); + launch(); finish(); + + + } private void launch() { @@ -165,4 +174,20 @@ public class LauncherActivity extends Activity { boolean result = uri != null && LAUNCH_CONTROL_AUTHORITY.equals(uri.getAuthority()); return result; } + + /* + * get Accent color from OS + * */ + + private int fetchAccentColor() { + TypedValue typedValue = new TypedValue(); + TypedArray a = this.obtainStyledAttributes(typedValue.data, new int[] { R.attr.colorAccent }); + int color = a.getColor(0, 0); + a.recycle(); + Log.e("TAG", "accent Colour #"+Integer.toHexString(color)); + //toolbar change color to accent color + + return color; + } + }