1.修复开机启动可能出现的空指针异常。
authorkfl_614 <kfl_614@163.com>
Thu, 2 Apr 2020 11:14:47 +0000 (19:14 +0800)
committerkfl_614 <kfl_614@163.com>
Thu, 2 Apr 2020 11:14:47 +0000 (19:14 +0800)
2.修复开机被加载两次。
3.优化APP滑动动画
4.优化Fragment切换动画

Signed-off-by: kfl_614 <kfl_614@163.com>
17 files changed:
app/src/main/AndroidManifest.xml
app/src/main/java/com/ic/launcher/FragmentManage.java
app/src/main/java/com/ic/launcher/IcLauncherApplication.java
app/src/main/java/com/ic/launcher/MainActivity.java
app/src/main/java/com/ic/launcher/fragment/AppListFragment.java
app/src/main/java/com/ic/launcher/fragment/BaseFragment.java
app/src/main/java/com/ic/launcher/listener/IChangeMainFragmentListener.java
app/src/main/java/com/ic/launcher/mode/AppModel.java
app/src/main/java/com/ic/launcher/mode/BaseModel.java
app/src/main/java/com/ic/launcher/mode/L02MainModel.java
app/src/main/java/com/ic/launcher/presenter/PhoneStatePresenter.java
app/src/main/res/anim/slide_left_to_right.xml [new file with mode: 0644]
app/src/main/res/anim/slide_right_to_left.xml [new file with mode: 0644]
app/src/main/res/layout/fragment_app_list.xml
app/src/main/res/layout/item_app_layout.xml
app/src/main/res/values/dimens.xml
app/version_code.properties

index 3f4551a..4bacd10 100644 (file)
@@ -37,7 +37,8 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".MainActivity">
+        <activity android:name=".MainActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize|locale|screenLayout|mcc|mnc">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="android.intent.action.VIEW" />
index ed9a272..6698577 100644 (file)
@@ -8,6 +8,7 @@ import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
 import com.ic.launcher.fragment.AppListFragment;
+import com.ic.launcher.fragment.BaseFragment;
 import com.ic.launcher.fragment.L02MainFragment;
 import com.ic.launcher.fragment.LowPowerModeFragment;
 import com.ic.launcher.fragment.clock.Clock12DialFragment;
@@ -31,6 +32,7 @@ public class FragmentManage {
 
     private FragmentManager ftManager;
 
+
     FragmentManage(Context context, FragmentManager ftManager) {
         this.ftManager = ftManager;
         mAddFt = new SparseArray<>();
@@ -42,12 +44,13 @@ public class FragmentManage {
      * 可能的值为 {@link Clock6DialFragment} 或者 {@link Clock12DialFragment}  模拟表盘
      */
 
-    void showCurrMainFragment(boolean finish) {
+    void showCurrMainFragment(boolean finish, int direction) {
         Fragment fragment = getFragmentList(MAIN_FRAGMENT_INDEX);
         if (fragment == null) {
             fragment = getCurrMainFragment();
             addFragmentList(MAIN_FRAGMENT_INDEX, fragment);
         }
+        ((BaseFragment) fragment).setEnterDirection(direction);
         addOrShowFragment(finish, fragment);
     }
 
@@ -80,7 +83,7 @@ public class FragmentManage {
         }
 
         if (mAddFt.get(1).isVisible()) {
-            showCurrMainFragment(finish);
+            showCurrMainFragment(finish, 0);
             return true;
         }
 
@@ -144,7 +147,7 @@ public class FragmentManage {
 
         FragmentTransaction ft = ftManager.beginTransaction();
         Fragment dd = mAddFt.get(MAIN_FRAGMENT_INDEX);
-        if(dd != null){
+        if (dd != null) {
             ft.remove(mAddFt.get(MAIN_FRAGMENT_INDEX));
             mAddFt.remove(MAIN_FRAGMENT_INDEX);
         }
@@ -190,7 +193,7 @@ public class FragmentManage {
             }
         }
 
-        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
+        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
 
         if (fragment.isAdded()) {
             ft.show(fragment);
index 0b2a896..5d0b3d8 100644 (file)
@@ -2,7 +2,10 @@ package com.ic.launcher;
 
 import android.app.Application;
 
+import com.ic.launcher.presenter.AppListPresenter;
 import com.ic.launcher.presenter.BatteryPresenter;
+import com.ic.launcher.presenter.HardwarePresenter;
+import com.ic.launcher.presenter.PhoneStatePresenter;
 import com.ic.launcher.presenter.TimeDatePresenter;
 import com.ic.launcher.util.CrashHandler;
 import com.ic.launcher.util.IcLog;
@@ -12,6 +15,9 @@ public class IcLauncherApplication extends Application {
 
     private TimeDatePresenter timeDatePresenter;
     private BatteryPresenter batteryPresenter;
+    private AppListPresenter appListPresenter;
+    private HardwarePresenter hardwarePresenter;
+    private PhoneStatePresenter phonePresenter;
 
     @Override
     public void onCreate() {
@@ -24,6 +30,9 @@ public class IcLauncherApplication extends Application {
 
         timeDatePresenter = new TimeDatePresenter(this);
         batteryPresenter = new BatteryPresenter(this);
+        appListPresenter = new AppListPresenter(this);
+        hardwarePresenter = new HardwarePresenter(this);
+        phonePresenter = new PhoneStatePresenter(this);
     }
 
     public TimeDatePresenter getTimeDatePresenter() {
@@ -33,4 +42,16 @@ public class IcLauncherApplication extends Application {
     public BatteryPresenter getBatteryPresenter() {
         return batteryPresenter;
     }
+
+    public AppListPresenter getAppListPresenter() {
+        return appListPresenter;
+    }
+
+    public HardwarePresenter getHardwarePresenter() {
+        return hardwarePresenter;
+    }
+
+    public PhoneStatePresenter getPhonePresenter() {
+        return phonePresenter;
+    }
 }
index 529fadf..d8c431f 100644 (file)
@@ -36,14 +36,14 @@ public class MainActivity extends AppCompatActivity implements
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         ftManage = new FragmentManage(this,getSupportFragmentManager());
-        ftManage.showCurrMainFragment(isFinishing());
+        ftManage.showCurrMainFragment(isFinishing(),0);
 
         ((IcLauncherApplication)getApplication()).getBatteryPresenter().registerBatteryReceiver();
         ((IcLauncherApplication)getApplication()).getTimeDatePresenter().registerTimeDateReceiver();
         registerChangeClockReceiver();
 
         ServiceUtil.startServiceUtil(getApplicationContext(),
-               "com.ic.action.WORK_SERVICE", getPackageName());
+              "com.ic.action.WORK_SERVICE", getPackageName());
     }
 
     @Override
@@ -76,8 +76,8 @@ public class MainActivity extends AppCompatActivity implements
     }
 
     @Override
-    public void onChangeMain() {
-        ftManage.showCurrMainFragment(isFinishing());
+    public void onChangeMain(int direction) {
+        ftManage.showCurrMainFragment(isFinishing(),direction);
     }
 
     @Override
index 6d3c3f2..d7048ca 100644 (file)
@@ -6,16 +6,21 @@ import android.graphics.Rect;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.PluralsRes;
 import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentTransaction;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.PagerSnapHelper;
 import androidx.recyclerview.widget.RecyclerView;
+import androidx.viewpager2.widget.ViewPager2;
 
+import android.os.SystemClock;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
 import android.widget.Toast;
 
 import com.ic.launcher.IcLauncherApplication;
@@ -27,32 +32,38 @@ import com.ic.launcher.listener.ICheckAppItemListener;
 import com.ic.launcher.mode.AppModel;
 import com.ic.launcher.util.IcLog;
 
+import static java.lang.Math.abs;
+
 
 public class AppListFragment extends Fragment {
     private static final String TAG = "AppListFragment";
 
     private Context mContext;
 
-    private RecyclerView mAppRv;
+    private ViewPager2 mAppRv;
 
     private AppModel appModel;
 
-    private IChangeMainFragmentListener changeMainFragmentListener;
+    private IChangeMainFragmentListener changeListener;
     private AppInfoAdapter appAdapter;
 
 
     private RecyclerView indicatorRv;
     private IndicatorAdapter indicatorAdapter;
 
+    private int pageTranslationX;
+
     //1 显示第一个  2  显示最后一个
     private int mCurrType;
+    private int mEntryDirection;
+    private boolean isExecute = false;
 
     @Override
     public void onAttach(@NonNull Context context) {
         super.onAttach(context);
         mContext = context;
         if (context instanceof IChangeMainFragmentListener) {
-            changeMainFragmentListener = (IChangeMainFragmentListener) context;
+            changeListener = (IChangeMainFragmentListener) context;
         }
     }
 
@@ -60,6 +71,7 @@ public class AppListFragment extends Fragment {
         AppListFragment fragment = new AppListFragment();
         Bundle args = new Bundle();
         args.putInt("type", type);
+        args.putInt("direction", type);
         fragment.setArguments(args);
         return fragment;
     }
@@ -70,6 +82,7 @@ public class AppListFragment extends Fragment {
         Bundle bundle = getArguments();
         if (bundle != null) {
             mCurrType = bundle.getInt("type");
+            mEntryDirection = bundle.getInt("direction");
         }
 
         appModel = initFragmentModel();
@@ -92,20 +105,24 @@ public class AppListFragment extends Fragment {
         super.onResume();
         if (mCurrType == 2) {
             //只有初始化进来的时候才执行,
-            mAppRv.scrollToPosition(appAdapter.getAppEndIndex());
+            mAppRv.setCurrentItem(appAdapter.getAppEndIndex(), false);
             indicatorAdapter.updateIndicatorState(appAdapter.getAppEndIndex());
-            mCurrType = 0;
+            mCurrType = -1;
         }
     }
 
     public void setMoveEndItem(boolean move) {
         if (move) {
-            mAppRv.scrollToPosition(appAdapter.getAppEndIndex());
+            mAppRv.setCurrentItem(appAdapter.getAppEndIndex(), false);
             indicatorAdapter.updateIndicatorState(appAdapter.getAppEndIndex());
+            mEntryDirection = 2;
         } else {
-            mAppRv.scrollToPosition(0);
+            mAppRv.setCurrentItem(0, false);
             indicatorAdapter.updateIndicatorState(0);
+            mEntryDirection = 1;
         }
+
+        isExecute = false;
     }
 
     private AppModel initFragmentModel() {
@@ -122,15 +139,18 @@ public class AppListFragment extends Fragment {
 
     private void initRecyclerView() {
         appAdapter = new AppInfoAdapter(mContext, itemListener);
-        LinearLayoutManager mLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false);
-
-        mAppRv.setLayoutManager(mLayoutManager);
         mAppRv.setAdapter(appAdapter);
+        mAppRv.registerOnPageChangeCallback(scrollListener);
 
+        mAppRv.setOffscreenPageLimit(1);
+        int nextItemVisiblePx = (int) getResources().getDimension(R.dimen.app_next_item_visible);
+        int currentItemHorizontalMarginPx = (int) getResources().getDimension(R.dimen.app_current_item_horizontal_margin);
+        pageTranslationX = nextItemVisiblePx + currentItemHorizontalMarginPx;
 
-        new PagerSnapHelper().attachToRecyclerView(mAppRv);
+        mAppRv.setPageTransformer(new CustomPageTransformer());
+        mAppRv.addItemDecoration(new SpacesItemDecoration(currentItemHorizontalMarginPx));
 
-        mAppRv.addOnScrollListener(scrollListener);
+        ((RecyclerView) mAppRv.getChildAt(0)).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
     }
 
     private void initIndicator(boolean[] state) {
@@ -141,56 +161,46 @@ public class AppListFragment extends Fragment {
         indicatorRv.setAdapter(indicatorAdapter);
     }
 
-    private RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
+    private ViewPager2.OnPageChangeCallback scrollListener = new ViewPager2.OnPageChangeCallback() {
 
         private boolean isJudge = true;
+        private int pos = -1;
 
         @Override
-        public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
-            super.onScrollStateChanged(recyclerView, newState);
-            //IcLog.i(TAG, "newState:" + newState);
-            switch (newState) {
-                case RecyclerView.SCROLL_STATE_IDLE:
-                    judgeItemPosition(recyclerView, isJudge);
-                    break;
-                case RecyclerView.SCROLL_STATE_DRAGGING:
-                    isJudge = true;
-                    break;
-                case RecyclerView.SCROLL_STATE_SETTLING:
-                    isJudge = false;
-                    break;
-            }
+        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+            super.onPageScrolled(position, positionOffset, positionOffsetPixels);
         }
 
         @Override
-        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
-            super.onScrolled(recyclerView, dx, dy);
+        public void onPageSelected(int position) {
+            super.onPageSelected(position);
+            IcLog.i(TAG, "onPageSelected:" + position);
+            indicatorAdapter.updateIndicatorState(position);
+            pos = position;
+            isExecute = false;
         }
 
-        private void judgeItemPosition(RecyclerView recyclerView, boolean isJudge) {
-            LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
-            if (manager == null) return;
-            //获取最后一个完全显示的ItemPosition ,角标值
-            int first = manager.findFirstVisibleItemPosition();
-            indicatorAdapter.updateIndicatorState(first);
-            if (!isJudge) {
-                return;
-            }
-            int lastVisibleItem = manager.findLastCompletelyVisibleItemPosition();
-            //所有条目,数量值
-            int totalItemCount = manager.getItemCount();
-
-            // 判断是否滚动到底部,并且是向右滚动
-            if (lastVisibleItem == (totalItemCount - 1)) {
-                //加载更多功能的代码
-                IcLog.i(TAG, "lastVisibleItem:" + lastVisibleItem);
-                changeMainFragmentListener.onChangeMain();
-            }
-
-            if (lastVisibleItem == 0) {
-                //加载更多功能的代码
-                IcLog.i(TAG, "Start VisibleItem:" + lastVisibleItem);
-                changeMainFragmentListener.onChangeMain();
+        @Override
+        public void onPageScrollStateChanged(int state) {
+            super.onPageScrollStateChanged(state);
+            switch (state) {
+                case ViewPager2.SCROLL_STATE_IDLE:
+                    IcLog.i(TAG, "newState:" + state + ",isExecute:" + isExecute);
+                    if (isJudge && !isExecute) {
+                        if (pos == 0) {
+                            changeListener.onChangeMain(1);
+                        } else if (pos == appAdapter.getAppEndIndex()) {
+                            changeListener.onChangeMain(2);
+                        }
+                        isExecute = true;
+                    }
+                    break;
+                case ViewPager2.SCROLL_STATE_DRAGGING:
+                    isJudge = true;
+                    break;
+                case ViewPager2.SCROLL_STATE_SETTLING:
+                    isJudge = false;
+                    break;
             }
         }
     };
@@ -210,5 +220,30 @@ public class AppListFragment extends Fragment {
         }
     }
 
+    public class CustomPageTransformer implements ViewPager2.PageTransformer {
+        @Override
+        public void transformPage(@NonNull View page, float position) {
+            page.setTranslationX(-pageTranslationX * position);
+            page.setScaleY(1 - (0.25f * abs(position)));
+            page.setScaleX(1 - (0.25f * abs(position)));
+        }
+    }
+
     private ICheckAppItemListener itemListener = pos -> appModel.onStartAppActivity(pos);
+
+
+    @Nullable
+    @Override
+    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
+        IcLog.i(TAG, "CreateAnimation transit" + transit + ",enter:" + enter + ",nextAnim" + nextAnim);
+        if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN && enter) {
+            switch (mEntryDirection) {
+                case 1:
+                    return AnimationUtils.loadAnimation(getContext(), R.anim.slide_right_to_left);
+                case 2:
+                    return AnimationUtils.loadAnimation(getContext(), R.anim.slide_left_to_right);
+            }
+        }
+        return null;
+    }
 }
index ee7dccf..a56a84d 100644 (file)
@@ -5,14 +5,18 @@ import android.app.Application;
 import android.content.Context;
 import android.os.Bundle;
 import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.view.GestureDetectorCompat;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentTransaction;
 
 import com.ic.launcher.IcLauncherApplication;
+import com.ic.launcher.R;
 import com.ic.launcher.listener.MainClockGestureDetectorImpl;
 import com.ic.launcher.mode.BaseModel;
 import com.ic.launcher.util.IcLog;
@@ -28,6 +32,8 @@ public abstract class BaseFragment extends Fragment {
     private GestureDetectorCompat gesture;
     private MainClockGestureDetectorImpl.OnClockGestureFlingListener flingListener;
 
+    private int mEntryDirection=0;
+
     @Override
     public void onAttach(@NonNull Context context) {
         super.onAttach(context);
@@ -94,4 +100,25 @@ public abstract class BaseFragment extends Fragment {
             return true;
         });
     }
+
+    public void setEnterDirection(int direction){
+        IcLog.i(TAG,"setEnterDirection:"+mEntryDirection);
+        mEntryDirection = direction;
+    }
+
+
+    @Nullable
+    @Override
+    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
+        IcLog.i(TAG,"CreateAnimation transit"+transit+",enter:"+enter+",nextAnim"+nextAnim+",mEntryDirection:"+mEntryDirection);
+        if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN && enter) {
+            /**switch (mEntryDirection){
+                case 1:
+                    return AnimationUtils.loadAnimation(getContext(), R.anim.slide_left_to_right);
+                case 2:
+                    return AnimationUtils.loadAnimation(getContext(), R.anim.slide_right_to_left);
+            }**/
+        }
+        return super.onCreateAnimation(transit,enter,nextAnim);
+    }
 }
index 3622e12..d0bf434 100644 (file)
@@ -1,5 +1,5 @@
 package com.ic.launcher.listener;
 
 public interface IChangeMainFragmentListener {
-    void onChangeMain();
+    void onChangeMain(int direction);
 }
index c7230f5..c063afd 100644 (file)
@@ -8,6 +8,7 @@ import androidx.lifecycle.LiveData;
 import androidx.lifecycle.ViewModel;
 import androidx.lifecycle.ViewModelProvider;
 
+import com.ic.launcher.IcLauncherApplication;
 import com.ic.launcher.entity.AppInfoEntity;
 import com.ic.launcher.presenter.AppListPresenter;
 
@@ -19,7 +20,7 @@ public class AppModel extends AndroidViewModel {
 
     private AppModel(Application application) {
         super(application);
-        appListPresenter = new AppListPresenter(application);
+        appListPresenter = ((IcLauncherApplication)application).getAppListPresenter();
 
     }
 
index 15651a3..912d427 100644 (file)
@@ -61,7 +61,6 @@ public abstract class BaseModel extends AndroidViewModel {
     public void OnUiDestroy() {
         for (int i = 0; i < mPresenter.size(); i++) {
             mPresenter.valueAt(i).onPresenterDestroy();
-            mPresenter.remove(i);
         }
     }
 
index dfb623b..8570496 100644 (file)
@@ -7,6 +7,7 @@ import androidx.lifecycle.LiveData;
 import androidx.lifecycle.ViewModel;
 import androidx.lifecycle.ViewModelProvider;
 
+import com.ic.launcher.IcLauncherApplication;
 import com.ic.launcher.presenter.BatteryPresenter;
 import com.ic.launcher.presenter.HardwarePresenter;
 import com.ic.launcher.presenter.PhoneStatePresenter;
@@ -20,8 +21,8 @@ public class L02MainModel extends BaseModel {
 
     private L02MainModel(Application application) {
         super(application);
-        PhoneStatePresenter phonePresenter = new PhoneStatePresenter(application.getApplicationContext());
-        HardwarePresenter hardwarePresenter = new HardwarePresenter(application.getApplicationContext());
+        PhoneStatePresenter phonePresenter = ((IcLauncherApplication)application).getPhonePresenter();
+        HardwarePresenter hardwarePresenter = ((IcLauncherApplication)application).getHardwarePresenter();
 
         addPresenterList(PHONE_LIST_INDEX,phonePresenter);
         addPresenterList(HARDWARE_LIST_INDEX,hardwarePresenter);
index dc2449a..0986942 100644 (file)
@@ -49,11 +49,6 @@ public class PhoneStatePresenter extends PresenterCycle {
         }
 
         mQueryThread = null;
-
-        if(queryState != null){
-            queryState.destroyPhoneState();
-        }
-        queryState=null;
     }
 
     public PhoneStatePresenter(Context context) {
diff --git a/app/src/main/res/anim/slide_left_to_right.xml b/app/src/main/res/anim/slide_left_to_right.xml
new file mode 100644 (file)
index 0000000..70e9304
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+    android:duration="@android:integer/config_mediumAnimTime">
+    <translate
+        android:fromXDelta="-100%p"
+        android:toXDelta="0.0"
+        android:duration="100"
+        android:fillBefore="true"/>
+</set>
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_right_to_left.xml b/app/src/main/res/anim/slide_right_to_left.xml
new file mode 100644 (file)
index 0000000..17fde63
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+    android:duration="@android:integer/config_mediumAnimTime">
+    <translate
+        android:fromXDelta="100%p"
+        android:toXDelta="0.0"
+        android:duration="100"
+        android:fillBefore="true"/>
+
+</set>
\ No newline at end of file
index fe75f5b..d0e2183 100644 (file)
@@ -5,11 +5,10 @@
     android:layout_height="match_parent"
     tools:context=".fragment.AppListFragment">
 
-    <androidx.recyclerview.widget.RecyclerView
+    <androidx.viewpager2.widget.ViewPager2
         android:id="@+id/app_list"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:overScrollMode="never"/>
+        android:layout_height="match_parent"/>
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/app_indicator_rv"
index bdc49b5..5178faa 100644 (file)
@@ -18,7 +18,8 @@
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:onClick="@{() -> click.onAppItem(pos)}">
+        android:onClick="@{() -> click.onAppItem(pos)}"
+        android:background="@android:color/transparent">
 
         <ImageView
             android:id="@+id/app_icon_iv"
index d3c6f5a..9fe43d4 100644 (file)
@@ -5,4 +5,7 @@
 
     <dimen name="viewpager_next_item_visible">26dp</dimen>
     <dimen name="viewpager_current_item_horizontal_margin">42dp</dimen>
+
+    <dimen name="app_next_item_visible">26dp</dimen>
+    <dimen name="app_current_item_horizontal_margin">42dp</dimen>
 </resources>
\ No newline at end of file
index 47b41f5..097f2ca 100644 (file)
@@ -1,2 +1,2 @@
-#Tue Mar 31 10:20:58 CST 2020
-VERSION_CODE=27
+#Thu Apr 02 19:06:12 CST 2020
+VERSION_CODE=29