diff --git a/powermenu/src/main/java/com/skydoves/powermenu/AbstractPowerMenu.java b/powermenu/src/main/java/com/skydoves/powermenu/AbstractPowerMenu.java index d435ccd..3b1fd0b 100644 --- a/powermenu/src/main/java/com/skydoves/powermenu/AbstractPowerMenu.java +++ b/powermenu/src/main/java/com/skydoves/powermenu/AbstractPowerMenu.java @@ -84,6 +84,7 @@ public abstract class AbstractPowerMenu> protected boolean fixedHeight = false; protected boolean isShowing = false; + private Context mContext; @Px protected int contentViewPadding; private int defaultPosition; @@ -190,7 +191,8 @@ protected void initialize(Context context, Boolean isMaterial) { setOnMenuItemClickListener(onMenuItemClickListener); contentViewPadding = ConvertUtil.convertDpToPixel(10, context); - MenuPreferenceManager.initialize(context); + MenuPreferenceManager.initialize(); + mContext = context; } /** @@ -1102,7 +1104,7 @@ public String getPreferenceName() { */ public int getPreferencePosition(int defaultPosition) { return MenuPreferenceManager.getInstance() - .getPosition(getAdapter().getPreferenceName(), defaultPosition); + .getPosition(mContext, getAdapter().getPreferenceName(), defaultPosition); } /** @@ -1113,7 +1115,7 @@ public int getPreferencePosition(int defaultPosition) { public void setPreferencePosition(int defaultPosition) { MenuPreferenceManager instance = MenuPreferenceManager.getInstance(); if (instance != null && getPreferenceName() != null) { - instance.setPosition(getPreferenceName(), defaultPosition); + instance.setPosition(mContext, getPreferenceName(), defaultPosition); } } @@ -1129,7 +1131,7 @@ private void setPreferenceName(@NonNull String preferenceName) { /** clears the preference name of PowerMenu. */ public void clearPreference() { if (getAdapter().getPreferenceName() != null) { - MenuPreferenceManager.getInstance().clearPosition(getAdapter().getPreferenceName()); + MenuPreferenceManager.getInstance().clearPosition(mContext, getAdapter().getPreferenceName()); } } diff --git a/powermenu/src/main/java/com/skydoves/powermenu/CustomPowerMenu.java b/powermenu/src/main/java/com/skydoves/powermenu/CustomPowerMenu.java index 38b14b8..8f46874 100644 --- a/powermenu/src/main/java/com/skydoves/powermenu/CustomPowerMenu.java +++ b/powermenu/src/main/java/com/skydoves/powermenu/CustomPowerMenu.java @@ -75,7 +75,7 @@ protected void initialize(@NonNull Context context, Boolean isMaterial) { } else { binding = LayoutPowerMenuLibrarySkydovesBinding.inflate(layoutInflater, null, false); } - this.adapter = (E) (new MenuBaseAdapter<>(menuListView)); + this.adapter = (E) (new MenuBaseAdapter<>(menuListView, context)); super.initialize(context, isMaterial); } diff --git a/powermenu/src/main/java/com/skydoves/powermenu/MenuBaseAdapter.java b/powermenu/src/main/java/com/skydoves/powermenu/MenuBaseAdapter.java index 9ef595b..5b5915f 100644 --- a/powermenu/src/main/java/com/skydoves/powermenu/MenuBaseAdapter.java +++ b/powermenu/src/main/java/com/skydoves/powermenu/MenuBaseAdapter.java @@ -16,6 +16,7 @@ package com.skydoves.powermenu; +import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; @@ -31,16 +32,19 @@ public class MenuBaseAdapter extends BaseAdapter implements IMenuItem { private int selectedPosition = -1; private String preferenceName; + private Context mContext; - public MenuBaseAdapter() { + public MenuBaseAdapter(Context context) { super(); this.itemList = new ArrayList<>(); + mContext = context; } - public MenuBaseAdapter(ListView listView) { + public MenuBaseAdapter(ListView listView, Context context) { super(); this.itemList = new ArrayList<>(); this.listView = listView; + mContext = context; } @Override @@ -100,7 +104,7 @@ public void setSelectedPosition(int position) { MenuPreferenceManager instance = MenuPreferenceManager.getInstance(); if (instance != null && preferenceName != null) { - instance.setPosition(preferenceName, position); + instance.setPosition(mContext, preferenceName, position); } } diff --git a/powermenu/src/main/java/com/skydoves/powermenu/MenuPreferenceManager.java b/powermenu/src/main/java/com/skydoves/powermenu/MenuPreferenceManager.java index 243c36f..83e20ad 100644 --- a/powermenu/src/main/java/com/skydoves/powermenu/MenuPreferenceManager.java +++ b/powermenu/src/main/java/com/skydoves/powermenu/MenuPreferenceManager.java @@ -24,20 +24,23 @@ class MenuPreferenceManager { private static final String position = "_POSITION"; private static MenuPreferenceManager menuPreferenceManager; - private final SharedPreferences sharedPreferences; + private static SharedPreferences sharedPreferences; - private MenuPreferenceManager(Context context) { - sharedPreferences = - context.getSharedPreferences("com.skydoves.powermenu", Context.MODE_PRIVATE); + public static SharedPreferences getSharedPrefsInstance(Context context) + { + if (sharedPreferences == null) { + sharedPreferences = context.getSharedPreferences("com.skydoves.powermenu", Context.MODE_PRIVATE); + } + return sharedPreferences; } /** * initialize the {@link MenuPreferenceManager} instance. * - * @param context context. + * */ - protected static void initialize(Context context) { - menuPreferenceManager = new MenuPreferenceManager(context); + protected static void initialize() { + menuPreferenceManager = new MenuPreferenceManager(); } /** @@ -54,12 +57,13 @@ protected static MenuPreferenceManager getInstance() { /** * gets the saved menu position from preference. * + * @param context * @param name preference name. * @param defaultPosition default preference menu position. * @return the saved menu position. */ - protected int getPosition(String name, int defaultPosition) { - return sharedPreferences.getInt(name, defaultPosition); + protected int getPosition(Context context, String name, int defaultPosition) { + return getSharedPrefsInstance(context).getInt(name, defaultPosition); } /** @@ -68,8 +72,8 @@ protected int getPosition(String name, int defaultPosition) { * @param name preference name. * @param position preference menu position. */ - protected void setPosition(String name, int position) { - sharedPreferences.edit().putInt(name, position).apply(); + protected void setPosition(Context context, String name, int position) { + getSharedPrefsInstance(context).edit().putInt(name, position).apply(); } /** @@ -77,7 +81,7 @@ protected void setPosition(String name, int position) { * * @param name preference name. */ - protected void clearPosition(String name) { - sharedPreferences.edit().remove(name).apply(); + protected void clearPosition(Context context, String name) { + getSharedPrefsInstance(context).edit().remove(name).apply(); } }