/* * Copyright 2015 Hippo Seven * * 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 com.hippo.nimingban.widget; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ScrollView; import android.widget.TextView; import com.hippo.nimingban.Constants; import com.hippo.nimingban.R; import com.hippo.nimingban.util.Settings; import com.hippo.ripple.Ripple; import com.hippo.unifile.UniFile; import com.hippo.util.DrawableManager; import com.hippo.widget.DrawerListView; import com.hippo.yorozuya.Messenger; import com.hippo.yorozuya.ResourcesUtils; public final class LeftDrawer extends ScrollView implements AdapterView.OnItemClickListener, HeaderImageView.OnLongClickImageListener, View.OnClickListener { private static final int INDEX_SEARCH = 0; private static final int INDEX_FEED = 1; private static final int INDEX_RECORD = 2; private static final int INDEX_SETTINGS = 3; private HeaderImageView mHeader; private DrawerListView mDrawerListView; private TextView mDarkTheme; private long mHit; private boolean mHitDarkTheme = false; private Helper mHelper; public LeftDrawer(Context context) { super(context); init(context); } public LeftDrawer(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public LeftDrawer(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { setFillViewport(true); setHorizontalScrollBarEnabled(false); setVerticalScrollBarEnabled(false); LayoutInflater.from(context).inflate(R.layout.widget_left_drawer, this); mHeader = (HeaderImageView) findViewById(R.id.header); mDrawerListView = (DrawerListView) findViewById(R.id.drawer_list_view); mDarkTheme = (TextView) findViewById(R.id.dark_theme); mHeader.setOnLongClickImageListener(this); Resources resources = context.getResources(); Drawable search = DrawableManager.getDrawable(context, R.drawable.v_magnify_x24); Drawable feed = DrawableManager.getDrawable(context, R.drawable.v_rss_x24); Drawable record = DrawableManager.getDrawable(context, R.drawable.v_history_x24); Drawable settings = DrawableManager.getDrawable(context, R.drawable.v_settings_x24); Drawable[] drawables = { search, feed, record, settings }; String[] strings = { resources.getString(R.string.search), resources.getString(R.string.feed), resources.getString(R.string.record), resources.getString(R.string.settings) }; mDrawerListView.setData(drawables, strings); mDrawerListView.setOnItemClickListener(this); mDarkTheme.setText(Settings.getDarkTheme() ? R.string.let_there_light : R.string.let_there_dark); mDarkTheme.setOnClickListener(this); Ripple.addRipple(mDarkTheme, ResourcesUtils.getAttrBoolean(context, R.attr.dark)); } public void loadHeaderImageView() { mHeader.load(); } public void unloadHeaderImageView() { mHeader.unload(); } @Override public void onItemClick(@NonNull AdapterView<?> parent, @NonNull View view, int position, long id) { // Avoid qiuck click action long now = System.currentTimeMillis(); if (now - mHit > 500) { switch (position) { case INDEX_SEARCH: if (mHelper != null) { mHelper.onClickSearch(); } break; case INDEX_FEED: if (mHelper != null) { mHelper.onClickFeed(); } break; case INDEX_RECORD: if (mHelper != null) { mHelper.onClickRecord(); } break; case INDEX_SETTINGS: if (mHelper != null) { mHelper.onClickSettings(); } break; } } mHit = now; } public void setHelper(Helper helper) { mHelper = helper; } @Override public boolean onLongClickImage(UniFile imageFile) { if (mHelper != null) { mHelper.OnLongClickImage(imageFile); return true; } else { return false; } } @Override public void onClick(@NonNull View v) { if (mDarkTheme == v) { if (!mHitDarkTheme) { mHitDarkTheme = true; boolean darkTheme = !Settings.getDarkTheme(); Settings.putDarkTheme(darkTheme); Messenger.getInstance().notify(Constants.MESSENGER_ID_CHANGE_THEME, darkTheme); } } } public interface Helper { void OnLongClickImage(UniFile imageFile); void onClickSearch(); void onClickFeed(); void onClickRecord(); void onClickSettings(); } }