Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2015
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.84 KB | None | 0 0
  1. package com.webfilings.webfilings.ui;
  2.  
  3. import android.content.Context;
  4. import android.os.Parcel;
  5. import android.os.Parcelable;
  6. import android.support.v4.widget.SlidingPaneLayout;
  7. import android.support.v7.app.ActionBar;
  8. import android.support.v7.widget.Toolbar;
  9. import android.util.AttributeSet;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12.  
  13. import com.webfilings.webfilings.R;
  14. import com.webfilings.webfilings.WFApplication;
  15. import com.webfilings.webfilings.activities.HomeActivity;
  16. import com.webfilings.webfilings.interfaces.HomeListSelectedListener;
  17. import com.webfilings.webfilings.services.AnalyticsService;
  18.  
  19. import java.util.ArrayList;
  20. import java.util.Observable;
  21. import java.util.Observer;
  22.  
  23. public class HomeSlidingPaneLayout extends SlidingPaneLayout
  24. implements HomeListSelectedListener, Observer {
  25.  
  26. private View mPartialView;
  27. private ArrayList<View> mPartialChildViews = new ArrayList<>();
  28.  
  29. private HomeFullDrawerLayout mFullView;
  30.  
  31. private HomeContentLayout mContentView;
  32.  
  33. private int mSelectedListIndex = -1;
  34. private HomeListSelectedListener mListSelectedListener;
  35.  
  36. public HomeSlidingPaneLayout(Context context) {
  37. super(context);
  38. }
  39.  
  40. public HomeSlidingPaneLayout(Context context, AttributeSet attrs) {
  41. super(context, attrs);
  42. }
  43.  
  44. public HomeSlidingPaneLayout(Context context, AttributeSet attrs, int defStyle) {
  45. super(context, attrs, defStyle);
  46. }
  47.  
  48. @Override
  49. protected void onFinishInflate() {
  50. super.onFinishInflate();
  51.  
  52. if (getChildCount() < 1) {
  53. return;
  54. }
  55.  
  56. View panel = findViewById(R.id.panelView);
  57. if (!(panel instanceof ViewGroup)) {
  58. return;
  59. }
  60.  
  61. ViewGroup viewGroup = (ViewGroup) panel;
  62.  
  63. mFullView = (HomeFullDrawerLayout)viewGroup.getChildAt(0);
  64. // Register ourselves for list selection notification
  65. mFullView.setOnListSelectedListener(this);
  66.  
  67. if (viewGroup.getChildCount() != 2) {
  68. return;
  69. }
  70.  
  71. // Ensure the full view is initially hidden
  72. mFullView.setVisibility(INVISIBLE);
  73.  
  74. mPartialView = viewGroup.getChildAt(1);
  75.  
  76. mContentView = (HomeContentLayout)findViewById(R.id.contentView);
  77. mContentView.setOnClickListener(new OnClickListener() {
  78. @Override
  79. public void onClick(View view) {
  80. if (isOpen()) {
  81. closePane();
  82. }
  83. }
  84. });
  85.  
  86. initViews();
  87.  
  88. super.setPanelSlideListener(new SlideListener());
  89. }
  90.  
  91. @Override
  92. protected Parcelable onSaveInstanceState() {
  93. Parcelable superState = super.onSaveInstanceState();
  94.  
  95. SavedState childState = new SavedState(superState);
  96. childState.selectedList = mSelectedListIndex;
  97.  
  98. return childState;
  99. }
  100.  
  101. @Override
  102. protected void onRestoreInstanceState(Parcelable state) {
  103. if (!(state instanceof SavedState)) {
  104. super.onRestoreInstanceState(state);
  105. } else {
  106. SavedState childState = (SavedState)state;
  107. super.onRestoreInstanceState(childState.getSuperState());
  108.  
  109. updateUI(childState.selectedList);
  110. }
  111. }
  112.  
  113. public void setActionBar(ActionBar actionBar, Toolbar toolbar) {
  114. // Forward to the full drawer
  115. mFullView.setActionBar(actionBar, toolbar);
  116. }
  117.  
  118. public void setSelectedList(int listIndex) {
  119. mSelectedListIndex = -1;
  120. // Forward to the full drawer
  121. mFullView.setSelectedList(listIndex);
  122. }
  123.  
  124. public void setOnListSelectedListener(HomeListSelectedListener listener) {
  125. mListSelectedListener = listener;
  126. }
  127.  
  128. public void toggle() {
  129. if (isOpen()) {
  130. closePane();
  131. } else {
  132. openPane();
  133. }
  134. }
  135.  
  136. private void initViews() {
  137. // Set the click listener for all clickable child views of the partial layout
  138. ViewGroup partialGroup = (ViewGroup)mPartialView;
  139. for (int i=0; i<partialGroup.getChildCount(); i++) {
  140. View child = partialGroup.getChildAt(i);
  141. if (child.isClickable()) {
  142. mPartialChildViews.add(child);
  143. child.setOnClickListener(mFullView);
  144. }
  145. }
  146.  
  147. HomeActivity.getGlobalBreadcrumbStack().addObserver(this);
  148. }
  149.  
  150. @Override
  151. public void onListSelected(int listIndex) {
  152. listSelected(listIndex);
  153.  
  154. if (isOpen()) {
  155. closePane();
  156. }
  157. }
  158.  
  159. @Override
  160. public void update(Observable observable, Object o) {
  161. if (observable instanceof BreadcrumbStack) {
  162. updateUI(HomeActivity.ALL_LIST_INDEX);
  163. }
  164. }
  165.  
  166. private void listSelected(int listIndex) {
  167. if (mSelectedListIndex != listIndex) {
  168. updateUI(listIndex);
  169.  
  170. // Notify the listener
  171. if (mListSelectedListener != null) {
  172. mListSelectedListener.onListSelected(listIndex);
  173. }
  174. }
  175. }
  176.  
  177. private void updateUI(int listIndex) {
  178. if (mPartialChildViews.size() > 0) {
  179. // Restore previously selected item's background color
  180. if (mSelectedListIndex != -1) {
  181. View partialChild = mPartialChildViews.get(mSelectedListIndex);
  182. partialChild.setSelected(false);
  183. partialChild.setAlpha(.54f);
  184. }
  185.  
  186. mSelectedListIndex = listIndex;
  187.  
  188. // Set newly selected item's background color
  189. if (mSelectedListIndex != -1) {
  190. View partialChild = mPartialChildViews.get(listIndex);
  191. partialChild.setSelected(true);
  192. partialChild.setAlpha(1);
  193. }
  194. }
  195. }
  196.  
  197. private class SlideListener extends SimplePanelSlideListener {
  198.  
  199. @Override
  200. public void onPanelSlide(View panel, float slideOffset) {
  201. super.onPanelSlide(panel, slideOffset);
  202.  
  203. if (mPartialView == null || mFullView == null) {
  204. return;
  205. }
  206.  
  207. mPartialView.setVisibility(VISIBLE);
  208. mPartialView.setAlpha(1 - slideOffset);
  209.  
  210. mFullView.setVisibility(VISIBLE);
  211. mFullView.setAlpha(slideOffset);
  212. }
  213.  
  214. @Override
  215. public void onPanelOpened(View panel) {
  216. super.onPanelOpened(panel);
  217.  
  218. AnalyticsService.getInstance().sendEventHit(AnalyticsService.ANALYTIC_CATEGORY_SETTINGS,
  219. AnalyticsService.ANALYTIC_ACTION_OPEN_SETTINGS_DRAWER);
  220.  
  221. mPartialView.setVisibility(INVISIBLE);
  222.  
  223. HomeActivity homeActivity = (HomeActivity) WFApplication.getActiveSessionActivity();
  224. homeActivity.invalidateOptionsMenu();
  225. }
  226.  
  227. @Override
  228. public void onPanelClosed(View panel) {
  229. super.onPanelClosed(panel);
  230.  
  231. mFullView.setVisibility(INVISIBLE);
  232.  
  233. HomeActivity homeActivity = (HomeActivity) WFApplication.getActiveSessionActivity();
  234. homeActivity.invalidateOptionsMenu();
  235. }
  236. }
  237.  
  238. static class SavedState extends BaseSavedState {
  239. int selectedList;
  240.  
  241. SavedState(Parcelable superState) {
  242. super(superState);
  243. }
  244.  
  245. private SavedState(Parcel in) {
  246. super(in);
  247. this.selectedList = in.readInt();
  248. }
  249.  
  250. @Override
  251. public void writeToParcel(Parcel out, int flags) {
  252. super.writeToParcel(out, flags);
  253. out.writeInt(this.selectedList);
  254. }
  255.  
  256. //required field that makes Parcelables from a Parcel
  257. public static final Parcelable.Creator<SavedState> CREATOR =
  258. new Parcelable.Creator<SavedState>() {
  259. public SavedState createFromParcel(Parcel in) {
  260. return new SavedState(in);
  261. }
  262. public SavedState[] newArray(int size) {
  263. return new SavedState[size];
  264. }
  265. };
  266. }
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement