android.widget.BaseAdapter

Here are the examples of the java api android.widget.BaseAdapter taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

108 Examples 7

19 Source : HorizontalCarouselLayout.java
with Apache License 2.0
from zyyoona7

public void setAdapter(BaseAdapter adapter) {
    if (adapter != null) {
        this.mAdapter = adapter;
        this.mCenterView = (this.mCurrenreplacedem = 0);
        if (this.mHowManyViews % 2 == 0) {
            this.mMaxChildUnderCenter = (this.mHowManyViews / 2);
        } else {
            this.mMaxChildUnderCenter = (this.mHowManyViews / 2);
        }
        for (int i = 0; i <= this.mMaxChildUnderCenter; i++) {
            if (i > this.mAdapter.getCount() - 1) {
                break;
            }
            View v = this.mAdapter.getView(i, null, this);
            addView(v);
        }
        childrenLayout(0.0F);
        invalidate();
    }
}

19 Source : MusicListActivity.java
with GNU General Public License v3.0
from yanxiaonuo

public clreplaced MusicListActivity extends SuperActivity {

    private ListView musicListView;

    BaseAdapter adapter = null;

    /**
     * 音乐列表LinkedList,存储每个音乐的文件地址
     */
    private LinkedList<File> list;

    /**
     * 音乐列表listView的适配器
     */
    private clreplaced MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object gereplacedem(int i) {
            return list.get(i);
        }

        @Override
        public long gereplacedemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View v;
            // 复用
            if (view == null) {
                v = View.inflate(MusicListActivity.this, R.layout.item_musiclist_adapter, null);
            } else {
                v = view;
            }
            TextView songName = v.findViewById(R.id.item_musicList_songName);
            TextView songer = v.findViewById(R.id.item_musicList_songer);
            AVLoadingIndicatorView loadingView = v.findViewById(R.id.item_loadingView);
            // 获取歌曲文件地址
            File f = (File) gereplacedem(i);
            // 设置歌曲名字
            String name = f.getName();
            songName.setText(name.substring(0, name.length() - 4));
            // 获取当前的播放位置,使得歌曲列表中的loadingView显示出来,表示其正在播放
            int currPlayingNum = Utils.getInt(MusicListActivity.this, Constant.PLAYINGNUM, 0);
            if (currPlayingNum == i) {
                loadingView.setVisibility(View.VISIBLE);
            } else {
                loadingView.setVisibility(View.GONE);
            }
            return v;
        }
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_musiclist);
        // 状态栏透明化
        StatusBarUtil.setTransparent(MusicListActivity.this);
        // 获取音乐列表listView
        musicListView = findViewById(R.id.musicListActivity_musicListView);
        // 检查是否有音乐列表
        // 音乐列表LinkedList 是直接被持久化处理,现在获取看是否存在列表
        list = Utils.getBeanFromSp(this, Constant.MUSICLISTKEY);
        if (list != null) {
            if (list.size() == 0) {
                // 空
                Toast.makeText(this, "未添加歌曲,点击右上方的搜索按钮可以进行搜索哦~", Toast.LENGTH_LONG).show();
            } else {
                // 设置适配器
                adapter = new MyAdapter();
                musicListView.setAdapter(adapter);
            }
        } else {
            Toast.makeText(this, "未添加歌曲,点击右上方的搜索按钮可以进行搜索哦~", Toast.LENGTH_LONG).show();
        }
        musicListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                // 设置当前播放歌曲的位置
                if (Utils.putInt(MusicListActivity.this, Constant.PLAYINGNUM, i)) {
                    // 进入播放页面
                    Intent intent = new Intent(MusicListActivity.this, PlayerActivity.clreplaced);
                    startActivity(intent);
                    finish();
                    overridePendingTransition(R.anim.next_in, R.anim.next_out);
                }
            }
        });
    }

    /**
     * 左上角的返回按钮
     *
     * @param view
     */
    public void back(View view) {
        MusicListActivity.this.finish();
        overridePendingTransition(R.anim.pre_in, R.anim.pre_out);
    }

    /**
     * 右上角搜索音乐按钮
     *
     * @param view
     */
    public void SearchMusic(View view) {
        // 开启搜索页面
        Intent intent = new Intent(this, SearchMusicActivity.clreplaced);
        startActivity(intent);
        this.finish();
        overridePendingTransition(R.anim.next_in, R.anim.next_out);
    }
}

19 Source : EditSpinner.java
with Apache License 2.0
from xuexiangjys

private void setBaseAdapter(BaseAdapter adapter) {
    if (mPopupWindow == null) {
        initPopupWindow();
    }
    mPopupWindow.setAdapter(adapter);
}

19 Source : ListPopup.java
with Apache License 2.0
from xuexiangjys

/**
 * 带条目的弹出框
 *
 * @author xuexiang
 * @since 2019/1/14 下午10:02
 */
public clreplaced ListPopup extends BaseCustomPopup {

    /**
     * 适配器
     */
    private BaseAdapter mAdapter;

    private int mMaxHeight;

    private AdapterView.OnItemClickListener mOnItemClickListener;

    protected ListPopup(Context context) {
        super(context);
    }

    @Override
    protected void initAttributes() {
        /**
         * 集合
         */
        ListView mListView = new XUIWrapContentListView(getContext(), mMaxHeight);
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(mWidth, mMaxHeight);
        mListView.setLayoutParams(lp);
        mListView.setAdapter(mAdapter);
        mListView.setVerticalScrollBarEnabled(false);
        mListView.setOnItemClickListener(mOnItemClickListener);
        mListView.setDivider(ResUtils.getDrawable(R.drawable.xui_config_list_item_selector));
        mListView.setDividerHeight(DensityUtils.dp2px(getContext(), 1));
        setContentView(mListView);
    }

    @Override
    protected void initViews(View view) {
    }

    public BaseAdapter getAdapter() {
        return mAdapter;
    }

    public ListPopup setAdapter(BaseAdapter adapter) {
        mAdapter = adapter;
        return this;
    }

    public int getMaxHeight() {
        return mMaxHeight;
    }

    public ListPopup setMaxHeight(int maxHeight) {
        mMaxHeight = maxHeight;
        return this;
    }

    public ListPopup setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
        return this;
    }
}

19 Source : ListPopup.java
with Apache License 2.0
from xuexiangjys

public ListPopup setAdapter(BaseAdapter adapter) {
    mAdapter = adapter;
    return this;
}

19 Source : SyncJob.java
with GNU Lesser General Public License v3.0
from TheAkki

/**
 * This clreplaced define and handle a synchronization job.
 * @author theakki
 * @since 0.1
 */
public clreplaced SyncJob extends AsyncTask<Context, Integer, Integer> {

    private final static String L_TAG = SyncJob.clreplaced.getSimpleName();

    // XML Tags
    private final static String TAG_ROOT = "SyncJob";

    private final static String TAG_SideA = "SideA";

    private final static String TAG_SideB = "SideB";

    private final static String TAG_Name = "Name";

    private final static String ATTR_Type = "type";

    private final static String TAG_Active = "Active";

    private final static String TAG_SyncDirection = "SyncDir";

    private final static String TAG_OneWayStrategy = "StrategyOneWay";

    private final static String TAG_TwoWayStrategy = "StrategyTwoWay";

    private final static String TAG_WhiteList = "IncludeList";

    private final static String TAG_Blacklist = "ExcludeList";

    private final static String TAG_Item = "Item";

    private final static String TAG_Schedule = "Schedule";

    private final static String ATTR_Schedule_Active = "Active";

    private final static String ATTR_Schedule_Hour = "Hour";

    private final static String ATTR_Schedule_Minute = "Minute";

    public static final String DEFAULT_SETTINGS = "<" + TAG_ROOT + "/>";

    // Attributees
    private SchedulerInfo _Scheduling = new SchedulerInfo();

    /**
     * Constructor for creating from XML Node
     * @param Node XML-Node
     */
    public SyncJob(Element Node) {
        loadJobSettings(Node);
    }

    /**
     * Constructor
     */
    public SyncJob() {
    }

    public void loadJobSettings(Element Node) {
        final String name = Node.getNodeName();
        if (name.compareToIgnoreCase(TAG_ROOT) != 0)
            throw new IllegalArgumentException("Node name '" + name + "' not expected");
        NodeList childs = Node.getChildNodes();
        for (int i = 0; i < childs.getLength(); ++i) {
            Element child = (Element) childs.item(i);
            final String elementName = child.getNodeName();
            if (elementName.compareToIgnoreCase(TAG_SideA) == 0) {
                String type = child.getAttribute(ATTR_Type);
                IConnection sideA = ConnectionFactory.create(type, (Element) child.getChildNodes().item(0));
                if (sideA == null) {
                    final String strError = "Connection '" + type + "' not implemented";
                    Log.e(L_TAG, strError);
                    throw new IllegalArgumentException(strError);
                }
                _SideA = sideA;
            } else if (elementName.compareToIgnoreCase(TAG_SideB) == 0) {
                String type = child.getAttribute(ATTR_Type);
                IConnection sideB = ConnectionFactory.create(type, (Element) child.getChildNodes().item(0));
                if (sideB == null) {
                    final String strError = "Connection '" + type + "' not implemented";
                    Log.e(L_TAG, strError);
                    throw new IllegalArgumentException(strError);
                }
                _SideB = sideB;
            } else if (elementName.compareToIgnoreCase(TAG_Name) == 0) {
                _Name = child.getTextContent();
            } else if (elementName.compareToIgnoreCase(TAG_Active) == 0) {
                _isActive = Boolean.parseBoolean(child.getTextContent());
            } else if (elementName.compareToIgnoreCase(TAG_Blacklist) == 0) {
                insertInList(child, _ExcludeList, true);
            } else if (elementName.compareToIgnoreCase(TAG_WhiteList) == 0) {
                insertInList(child, _IncludeList, true);
            } else if (elementName.compareToIgnoreCase(TAG_SyncDirection) == 0) {
                _Direction = SettingsHelper.SyncDirectionFromString(child.getTextContent(), true, SyncDirection.Booth);
            } else if (elementName.compareToIgnoreCase(TAG_OneWayStrategy) == 0) {
                _SingleStrategy = SettingsHelper.OneWayStrategyFromString(child.getTextContent(), true, OneWayStrategy.Standard);
            } else if (elementName.compareToIgnoreCase(TAG_TwoWayStrategy) == 0) {
                _BoothStrategy = SettingsHelper.TwoWayStrategyFromString(child.getTextContent(), true, TwoWayStrategy.AWins);
            } else if (elementName.compareToIgnoreCase(TAG_Schedule) == 0) {
                final String Active = child.getAttribute(ATTR_Schedule_Active);
                if (Active != null) {
                    _Scheduling.Active(Boolean.parseBoolean(Active));
                }
                final String hour = child.getAttribute(ATTR_Schedule_Hour);
                if (hour != null) {
                    _Scheduling.Hour(Integer.parseInt(hour));
                }
                final String minute = child.getAttribute(ATTR_Schedule_Minute);
                if (minute != null) {
                    _Scheduling.Minute(Integer.parseInt(minute));
                }
            }
        }
    }

    protected void insertInList(Element parent, ArrayList<String> list, boolean clear) {
        if (clear)
            list.clear();
        NodeList children = parent.getChildNodes();
        for (int i = 0; i < children.getLength(); ++i) {
            Element child = (Element) children.item(i);
            final String nodeName = child.getTagName();
            if (nodeName.compareToIgnoreCase(TAG_Item) != 0)
                throw new IllegalArgumentException("Unexpected Nodename '" + nodeName + "'.");
            /* It is necessary to trim this line. In other cases it's not so easy to match file properties */
            final String trimmedLine = StringHelper.reduceSpaces(child.getTextContent());
            list.add(trimmedLine);
        }
    }

    public Element getJobSettings(Doreplacedent doc) {
        Element root = doc.createElement(TAG_ROOT);
        // Name
        Element name = doc.createElement(TAG_Name);
        name.setTextContent(_Name);
        root.appendChild(name);
        // Active
        Element active = doc.createElement(TAG_Active);
        active.setTextContent("" + _isActive);
        root.appendChild(active);
        // Path A
        if (_SideA != null) {
            Element sideARoot = doc.createElement(TAG_SideA);
            sideARoot.setAttribute(ATTR_Type, _SideA.Type());
            Element sideA = _SideA.getJobSettings(doc);
            sideARoot.appendChild(sideA);
            root.appendChild(sideARoot);
        }
        // Path B
        if (_SideB != null) {
            Element sideBRoot = doc.createElement(TAG_SideB);
            sideBRoot.setAttribute(ATTR_Type, _SideB.Type());
            Element sideB = _SideB.getJobSettings(doc);
            sideBRoot.appendChild(sideB);
            root.appendChild(sideBRoot);
        }
        // Sync Direction
        Element syncDir = doc.createElement(TAG_SyncDirection);
        syncDir.setTextContent(_Direction.toString());
        root.appendChild(syncDir);
        // One Way Sync Strategy
        Element ows = doc.createElement(TAG_OneWayStrategy);
        ows.setTextContent(_SingleStrategy.toString());
        root.appendChild(ows);
        // Two Way Sync Strategy
        Element tws = doc.createElement(TAG_TwoWayStrategy);
        tws.setTextContent(_BoothStrategy.toString());
        root.appendChild(tws);
        // WhiteList
        Element wl = doc.createElement(TAG_WhiteList);
        getTextListNodes(_IncludeList, doc, wl);
        root.appendChild(wl);
        // Blacklist
        Element bl = doc.createElement(TAG_Blacklist);
        getTextListNodes(_ExcludeList, doc, bl);
        root.appendChild(bl);
        // Schedule
        Element schedule = doc.createElement(TAG_Schedule);
        schedule.setAttribute(ATTR_Schedule_Active, Boolean.toString(_Scheduling.Active()));
        schedule.setAttribute(ATTR_Schedule_Hour, Integer.toString(_Scheduling.Hour()));
        schedule.setAttribute(ATTR_Schedule_Minute, Integer.toString(_Scheduling.Minute()));
        root.appendChild(schedule);
        return root;
    }

    protected void getTextListNodes(ArrayList<String> list, Doreplacedent doc, Element root) {
        for (String strItem : list) {
            Element item = doc.createElement(TAG_Item);
            item.setTextContent(strItem);
            root.appendChild(item);
        }
    }

    public JobInfo getJobInfo() {
        JobInfo result = new JobInfo();
        result.Name = _Name;
        result.IsActive = _isActive;
        result.Status = _status;
        result.ActiveElements = _actNumber;
        result.MaxElements = _maxNumber;
        return result;
    }

    /**
     * Reset status from finished to not started
     */
    public void resetStatusWhenFinished() {
        if (_status == SyncStatus.FINISH) {
            _status = SyncStatus.NOT_STARTED;
            _actNumber = 0;
            _maxNumber = 0;
            sendUpdate();
        }
    }

    private int _status = 0;

    public int getProcess() {
        return _status;
    }

    private int _actNumber = 0;

    public int getActNumber() {
        return _actNumber;
    }

    public int _maxNumber = 0;

    public int getMaxNumber() {
        return _maxNumber;
    }

    private BaseAdapter _adapter;

    public void setAdapter(@Nullable BaseAdapter adapter) {
        _adapter = adapter;
    }

    @Override
    protected Integer doInBackground(Context... params) {
        Context act = params[0];
        Log.d(L_TAG, "Start background job for job '" + Name() + "'");
        Do(act);
        return 0;
    }

    @Override
    protected void onProgressUpdate(Integer... params) {
        _status = params[0];
        _actNumber = params[1];
        _maxNumber = params[2];
        sendUpdate();
    }

    private void sendUpdate() {
        if (_adapter != null)
            _adapter.notifyDataSetChanged();
    }

    public static int getStatusText(int status) {
        switch(status) {
            case SyncStatus.NOT_STARTED:
                return R.string.SyncStatus_NotStarted;
            case SyncStatus.CONNECT_FILES_A:
                return R.string.SyncStatus_ConnectA;
            case SyncStatus.CONNECT_FILES_B:
                return R.string.SyncStatus_ConnectB;
            case SyncStatus.READ_FILES_A:
                return R.string.SyncStatus_ReadFilesA;
            case SyncStatus.READ_FILES_B:
                return R.string.SyncStatus_ReadFilesB;
            case SyncStatus.replacedYSE_FILES:
                return R.string.SyncStatus_replacedyseFiles;
            case SyncStatus.CREATE_JOB:
                return R.string.SyncStatus_CreateJobs;
            case SyncStatus.COPY_FILES:
                return R.string.SyncStatus_CopyFiles;
            case SyncStatus.FINISH:
                return R.string.SyncStatus_Finish;
            default:
                {
                    final String strError = "No text for status '" + status + "' available";
                    Log.e(L_TAG, strError);
                    throw new IllegalStateException(strError);
                }
        }
    }

    @Override
    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);
    }

    private int _iState, _iActFile, _iMaxFile;

    private void updateProgress(int State, int actFile, int maxFile) {
        _iActFile = actFile;
        _iMaxFile = maxFile;
        updateProgress(State);
    }

    private void updateProgress(int State) {
        _iState = State;
        publishProgress(_iState, _iActFile, _iMaxFile);
    }

    private void Do(Context context) throws IllegalStateException {
        if (_SideA == null)
            throw new IllegalStateException("Connection A is null");
        if (_SideB == null)
            throw new IllegalStateException("Connection B is null");
        _SideA.RequestPermissions(context);
        _SideB.RequestPermissions(context);
        updateProgress(SyncStatus.CONNECT_FILES_A, 0, 0);
        _SideA.Connect(context);
        updateProgress(SyncStatus.CONNECT_FILES_B);
        _SideB.Connect(context);
        ArrayList<replacedyzeResult> whitelist = replacedyzeHelper.prepareList(_IncludeList);
        ArrayList<replacedyzeResult> blacklist = replacedyzeHelper.prepareList(_ExcludeList);
        updateProgress(SyncStatus.READ_FILES_A);
        ArrayList<FileItem> FilesA = _SideA.getFileList();
        ArrayList<FileItem> FilteredFilesA = replacedyzeHelper.filterFileList(FilesA, blacklist, whitelist);
        updateProgress(SyncStatus.READ_FILES_B);
        ArrayList<FileItem> FilesB = _SideB.getFileList();
        ArrayList<FileItem> FilteredFilesB = replacedyzeHelper.filterFileList(FilesB, blacklist, whitelist);
        updateProgress(SyncStatus.replacedYSE_FILES);
        ArrayList<FileMergeResult> MergedFiles = FileItemHelper.mergeFileList(FilteredFilesA, FilteredFilesB, _Direction, _SingleStrategy);
        updateProgress(SyncStatus.CREATE_JOB);
        ArrayList<DoingList> JobList = ApplyStrategy(MergedFiles);
        updateProgress(SyncStatus.COPY_FILES);
        Apply(JobList, _SideA, _SideB);
        _SideA.Disconnect();
        _SideB.Disconnect();
        updateProgress(SyncStatus.FINISH);
    }

    private void throwIllegalState(DoingList doing) {
        final String strError = "Invalid combination " + "A:'" + doing.SideA.Type.toString() + "' and " + "B:'" + doing.SideB.Type.toString() + "'";
        Log.e(L_TAG, strError);
        throw new IllegalStateException(strError);
    }

    protected void Apply(ArrayList<DoingList> list, IConnection conSideA, IConnection conSideB) {
        int success = 0;
        int errors = 0;
        for (DoingList job : list) {
            boolean result = false;
            switch(job.SideA.Type) {
                case Nothing:
                    // Single-Side actions only
                    switch(job.SideB.Type) {
                        case Nothing:
                            throw new IllegalStateException("Side A + B are empty");
                        case Move:
                            result = conSideB.Move(FileItemHelper.concatPath(job.SideB.File.RelativePath, job.SideB.File.FileName), job.SideB.Param);
                            break;
                        case Delete:
                            result = conSideB.Delete(FileItemHelper.concatPath(job.SideB.File.RelativePath, job.SideB.File.FileName));
                            break;
                        default:
                            throwIllegalState(job);
                    }
                    break;
                case Move:
                    switch(job.SideB.Type) {
                        case Nothing:
                            // Expected other side
                            break;
                        default:
                            throwIllegalState(job);
                    }
                    result = conSideA.Move(FileItemHelper.concatPath(job.SideA.File.RelativePath, job.SideA.File.FileName), job.SideA.Param);
                    break;
                case Delete:
                    switch(job.SideB.Type) {
                        case Nothing:
                            // Expected other side
                            break;
                        default:
                            throwIllegalState(job);
                    }
                    result = conSideA.Delete(FileItemHelper.concatPath(job.SideA.File.RelativePath, job.SideA.File.FileName));
                    break;
                case Read:
                    switch(job.SideB.Type) {
                        case Write:
                            result = Copy(job.SideA, job.SideB, conSideA, conSideB);
                            if (job.SideA.DeleteAfter) {
                                final String filename = FileItemHelper.concatPath(job.SideA.File.RelativePath, job.SideA.File.FileName);
                                boolean tempResult = conSideA.Delete(filename);
                                if (tempResult == false) {
                                    Log.e(L_TAG, "Can't delete file '" + filename + "' on Connection A");
                                }
                            }
                            break;
                        default:
                            throwIllegalState(job);
                    }
                    // No Single-Side Action allowed
                    break;
                case Write:
                    switch(job.SideB.Type) {
                        case Read:
                            result = Copy(job.SideB, job.SideA, conSideB, conSideA);
                            if (job.SideB.DeleteAfter) {
                                final String filename = FileItemHelper.concatPath(job.SideB.File.RelativePath, job.SideB.File.FileName);
                                boolean tempResult = conSideB.Delete(filename);
                                if (tempResult == false) {
                                    Log.e(L_TAG, "Can't delete file '" + filename + "' on Connection B");
                                }
                            }
                            break;
                        default:
                            throwIllegalState(job);
                    }
                    // No Single-Side Action allowed
                    break;
                default:
                    throw new IllegalStateException("Action '" + job.SideA.Type.toString() + "' not implemented");
            }
            if (result == false) {
                // fail...
                ++errors;
            } else {
                ++success;
            }
            updateProgress(SyncStatus.COPY_FILES, success + errors, list.size());
        }
        if (errors > 0)
            Log.e(L_TAG, "Finished sync (" + _Name + ") with " + errors + " errors");
        Log.d(L_TAG, "Finished sync (" + _Name + ")");
    }

    private boolean Copy(DoingSide Source, DoingSide Target, IConnection conSource, IConnection conTarget) {
        boolean bSourceIsLocal = conSource.hasLocalSupport();
        boolean bTargetIsLocal = conTarget.hasLocalSupport();
        final String strFileSource = FileItemHelper.concatPath(Source.File.RelativePath, Source.File.FileName);
        final String strFileTarget = FileItemHelper.concatPath(Target.File.RelativePath, Target.File.FileName);
        if (bSourceIsLocal) {
            final String strLocalSourceFile;
            try {
                strLocalSourceFile = conSource.getLocalFilename(strFileSource);
                File source = new File(strLocalSourceFile);
                conTarget.Write(source, Target.File);
                return true;
            } catch (IllegalAccessException e) {
                // should be allowed
                Log.e(L_TAG, "Can't get local filename for relative source file '" + strFileSource + "' for connection: " + conSource.Type());
                // retry without shortcut
                bSourceIsLocal = false;
            }
        } else if (bTargetIsLocal) {
            final String strLocalTargetFile;
            try {
                strLocalTargetFile = conTarget.getLocalFilename(strFileTarget);
                File target = new File(strLocalTargetFile);
                conSource.Read(strFileSource, target);
                return true;
            } catch (IllegalAccessException e) {
                // should be allowed
                Log.e(L_TAG, "Can't get local filename for relative target file '" + strFileTarget + "' for connection: " + conTarget.Type());
                // retry without shortcut
                bTargetIsLocal = false;
            }
        }
        if (bSourceIsLocal == false && bTargetIsLocal == false) {
            try {
                File tempFile = File.createTempFile("temporary", ".tmp");
                conSource.Read(strFileSource, tempFile);
                conTarget.Write(tempFile, Target.File);
                tempFile.delete();
            } catch (Exception e) {
                Log.e(L_TAG, e.getStackTrace().toString());
                e.printStackTrace();
                return false;
            }
        }
        return true;
    }

    protected ArrayList<DoingList> ApplyStrategy(ArrayList<FileMergeResult> MergedFiles) {
        ArrayList<DoingList> result = new ArrayList<>();
        String prefixPathA = "";
        String prefixPathB = "";
        switch(_SingleStrategy) {
            case AllFilesInDateFolder:
            /* fall through */
            case NewFilesInDateFolder:
            /* fall through */
            case MoveFilesInDateFolder:
                if (_Direction == SyncDirection.ToA) {
                    prefixPathA = FileItemHelper.concatPath("/", DateHelper.getDate());
                } else if (_Direction == SyncDirection.ToB) {
                    prefixPathB = FileItemHelper.concatPath("/", DateHelper.getDate());
                }
                break;
        }
        final boolean bDeleteSource = (_SingleStrategy == OneWayStrategy.MoveFiles) || (_SingleStrategy == OneWayStrategy.MoveFilesInDateFolder);
        for (int i = 0; i < MergedFiles.size(); ++i) {
            FileMergeResult res = MergedFiles.get(i);
            switch(res.State) {
                case MatchExactly:
                    // Do nothing
                    break;
                case DateChanged_ANewer:
                    if (_Direction == SyncDirection.ToB || _Direction == SyncDirection.Booth) {
                        DoingList temp = new DoingList();
                        temp.SideA.Type = JobType.Read;
                        temp.SideB.Type = JobType.Write;
                        temp.SideA.File = res.FileA.clone();
                        temp.SideA.File.RelativePath = prefixPathA + temp.SideA.File.RelativePath;
                        temp.SideB.File = res.FileA.clone();
                        temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
                        result.add(temp);
                    }
                    break;
                case DateChanged_BNewer:
                    if (_Direction == SyncDirection.ToA || _Direction == SyncDirection.Booth) {
                        DoingList temp = new DoingList();
                        temp.SideA.Type = JobType.Write;
                        temp.SideB.Type = JobType.Read;
                        temp.SideA.File = res.FileB.clone();
                        temp.SideA.File.RelativePath = prefixPathA + temp.SideA.File.RelativePath;
                        temp.SideB.File = res.FileB.clone();
                        temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
                        result.add(temp);
                    }
                    break;
                // fall through
                case Renamed_A:
                case Moved_A:
                    {
                        DoingList temp = new DoingList();
                        temp.SideA.Type = JobType.Move;
                        temp.SideA.File = res.FileA.clone();
                        temp.SideA.File.RelativePath = prefixPathA + res.FileA.RelativePath;
                        temp.SideA.File.Modified = res.FileB.Modified;
                        temp.SideA.Param = prefixPathA + res.FileB.RelativePath + res.FileB.FileName;
                        result.add(temp);
                    }
                    break;
                // fall through
                case Renamed_B:
                case Moved_B:
                    {
                        DoingList temp = new DoingList();
                        temp.SideB.Type = JobType.Move;
                        temp.SideB.File = res.FileB.clone();
                        temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
                        temp.SideB.File.Modified = res.FileA.Modified;
                        temp.SideB.Param = prefixPathB + res.FileA.RelativePath + res.FileA.FileName;
                        result.add(temp);
                    }
                    break;
                case NewFile:
                    if (res.FileA == null) {
                        DoingList temp = new DoingList();
                        temp.SideB.Type = JobType.Read;
                        temp.SideB.File = res.FileB.clone();
                        temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
                        temp.SideB.DeleteAfter = bDeleteSource;
                        temp.SideA.Type = JobType.Write;
                        temp.SideA.File = res.FileB.clone();
                        temp.SideA.File.RelativePath = prefixPathA + temp.SideA.File.RelativePath;
                        result.add(temp);
                    } else {
                        DoingList temp = new DoingList();
                        temp.SideA.Type = JobType.Read;
                        temp.SideA.File = res.FileA.clone();
                        temp.SideA.File.RelativePath = prefixPathA + temp.SideA.File.RelativePath;
                        temp.SideA.DeleteAfter = bDeleteSource;
                        temp.SideB.Type = JobType.Write;
                        temp.SideB.File = res.FileA.clone();
                        temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
                        result.add(temp);
                    }
                    break;
            }
        }
        return result;
    }

    // Sync Direction
    // SyncDirection.ToB;
    private SyncDirection _Direction = SyncDirection.Booth;

    public SyncDirection Direction() {
        return _Direction;
    }

    public void Direction(SyncDirection Dir) {
        _Direction = Dir;
    }

    private OneWayStrategy _SingleStrategy = OneWayStrategy.Standard;

    public OneWayStrategy StrategyOneWay() {
        return _SingleStrategy;
    }

    public void StrategyOneWay(OneWayStrategy Strategy) {
        _SingleStrategy = Strategy;
    }

    private TwoWayStrategy _BoothStrategy = TwoWayStrategy.BWins;

    public TwoWayStrategy StrategyTwoWay() {
        return _BoothStrategy;
    }

    public void StrategyTwoWay(TwoWayStrategy Strategy) {
        _BoothStrategy = Strategy;
    }

    private boolean _isActive = true;

    public boolean Active() {
        return _isActive;
    }

    public void Active(boolean value) {
        _isActive = value;
    }

    private ArrayList<String> _IncludeList = new ArrayList<>();

    private ArrayList<String> _ExcludeList = new ArrayList<>();

    private String _Name = "";

    public String Name() {
        return _Name;
    }

    public void Name(String Name) {
        this._Name = Name;
    }

    private IConnection _SideA;

    public void SideA(IConnection Con) {
        _SideA = Con;
    }

    // evtl. clone
    public IConnection SideA() {
        return _SideA;
    }

    private IConnection _SideB;

    public void SideB(IConnection Con) {
        _SideB = Con;
    }

    // evtl. clone
    public IConnection SideB() {
        return _SideB;
    }

    /**
     * Return the Scheduler information
     * @return Scheduler information
     */
    public SchedulerInfo Scheduler() {
        return _Scheduling;
    }

    /**
     * Set Scheduler information
     * @param sinfo Scheduler information
     */
    public void Scheduler(@NonNull SchedulerInfo sinfo) {
        _Scheduling = sinfo;
    }

    public clreplaced SyncStatus {

        public static final int NOT_STARTED = 0;

        public static final int CONNECT_FILES_A = 1;

        public static final int CONNECT_FILES_B = 2;

        public static final int READ_FILES_A = 3;

        public static final int READ_FILES_B = 4;

        public static final int replacedYSE_FILES = 5;

        public static final int CREATE_JOB = 6;

        public static final int COPY_FILES = 7;

        public static final int FINISH = 10;
    }
}

19 Source : SyncJob.java
with GNU Lesser General Public License v3.0
from TheAkki

public void setAdapter(@Nullable BaseAdapter adapter) {
    _adapter = adapter;
}

19 Source : EditEventFragment.java
with Apache License 2.0
from SoyaLeaf

public clreplaced EditEventFragment extends BaseFragment implements View.OnClickListener, Animator.AnimatorListener, DateSelectDialog.DateSelectCallback {

    private static final String DATE = "DATE";

    private static final String EVENT = "EVENT";

    private EditText mEditText;

    private InputMethodManager mManager;

    private Day mDay;

    private Event mEvent;

    private Button mBtnDate;

    private OnUpdateListener mOnUpdateListener;

    private OnAddListener mOnAddListener;

    private OnDeleteListener mOnDeleteListener;

    private boolean isExiting;

    private Spinner mSpinnerEventType;

    public EditEventFragment() {
        super(R.layout.fragment_add_event);
    }

    public static EditEventFragment newInstance(Day day, Event event) {
        EditEventFragment fragment = new EditEventFragment();
        Bundle args = new Bundle();
        args.putSerializable(DATE, day);
        args.putSerializable(EVENT, event);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    protected void setupUI() {
        findToolbar(R.id.toolbar).setNavigationOnClickListener(this);
        findViewById(R.id.ib_done).setOnClickListener(this);
        mEditText = findViewById(R.id.et);
        mBtnDate = findViewById(R.id.btn_date);
        mBtnDate.setOnClickListener(this);
        if (mEvent != null) {
            String replacedle = mEvent.getreplacedle();
            mEditText.setText(mEvent.getDetail());
            mBtnDate.setText(replacedle.substring(2));
        } else {
            String date = String.format(Locale.CHINA, "%s年%d月%d日", String.valueOf(mDay.getYear()), mDay.getMonth(), mDay.getDayOfMonth());
            mBtnDate.setText(date.substring(2));
        }
        mEditText.requestFocus();
        mSpinnerEventType = findViewById(R.id.spinner_event_type);
        mSpinnerEventType.setAdapter(mAdapter);
        int position = mEvent != null ? mEvent.getType() : Setting.default_event_type;
        mSpinnerEventType.setSelection(position);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            enter(view);
        }
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mManager = (InputMethodManager) mHostActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (mManager != null) {
            mManager.showSoftInput(mEditText, 0);
        }
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mDay = (Day) getArguments().getSerializable(DATE);
            mEvent = (Event) getArguments().getSerializable(EVENT);
        }
        if (mDay == null && mEvent != null) {
            String replacedle = mEvent.getreplacedle();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA);
            Date date = null;
            try {
                date = dateFormat.parse(replacedle);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            mDay = new Day(date.getYear() + 1900, date.getMonth() + 1, date.getDate());
        }
    }

    private void enter(View view) {
        WindowManager windowManager = mHostActivity.getWindowManager();
        if (windowManager != null) {
            Display display = windowManager.getDefaultDisplay();
            Point outSize = new Point();
            display.getRealSize(outSize);
            int height = outSize.y;
            int width = outSize.x;
            Animator anim = ViewAnimationUtils.createCircularReveal(view, width, height, 0, height);
            anim.setDuration(500);
            anim.setInterpolator(new AccelerateDecelerateInterpolator());
            anim.addListener(this);
            anim.start();
        }
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.btn_date:
                DateSelectDialog dateSelectDialog = DateSelectDialog.newInstance(mDay.getYear(), mDay.getMonth(), mDay.getDayOfMonth());
                dateSelectDialog.show(getChildFragmentManager(), "");
                dateSelectDialog.setDateSelectCallback(this);
                break;
            case R.id.ib_done:
                done();
                break;
            default:
                String detail = mEditText.getText().toString();
                if (isAddNewEvent()) {
                    if (!hasContent(detail)) {
                        removeSelf();
                    } else {
                        confirmExit();
                    }
                } else {
                    if (mEvent.getDetail().equals(detail)) {
                        removeSelf();
                    } else {
                        if (hasContent(detail)) {
                            confirmExit();
                        } else {
                            confirmDeleteIfContentIsEmpty();
                        }
                    }
                }
                break;
        }
    }

    private void confirmDeleteIfContentIsEmpty() {
        new AlertDialog.Builder(mHostActivity).setMessage(R.string.confirm_delete).setPositiveButton(R.string.delete, (dialog, which) -> {
            EventDao.getInstance(mHostActivity).delete(mEvent);
            mOnDeleteListener.onDelete();
            removeSelf();
        }).setNegativeButton(R.string.do_not_delete, (dialog, which) -> removeSelf()).show();
    }

    private void confirmExit() {
        new AlertDialog.Builder(mHostActivity).setMessage(R.string.whether_to_save).setPositiveButton(R.string.confirm, (dialog, which) -> done()).setNegativeButton(R.string.cancel, (dialog, which) -> removeSelf()).show();
    }

    private void done() {
        String detail = mEditText.getText().toString();
        EventDao eventDao = EventDao.getInstance(mHostActivity);
        if (hasContent(detail)) {
            String replacedle = 20 + mBtnDate.getText().toString();
            if (isAddNewEvent()) {
                addNewEvent(detail, replacedle, eventDao);
            } else {
                updateEvent(detail, replacedle, eventDao);
            }
            removeWithAnimationAndHideSoftInput();
        } else {
            if (!isAddNewEvent()) {
                confirmDeleteIfContentIsEmpty();
            }
        }
    }

    private boolean isAddNewEvent() {
        return mEvent == null;
    }

    private boolean hasContent(String detail) {
        return detail != null && !detail.trim().isEmpty();
    }

    private void addNewEvent(String detail, String replacedle, EventDao eventDao) {
        int position = mSpinnerEventType.getSelectedItemPosition();
        Event event = new Event(replacedle, detail, position);
        eventDao.add(event);
        if (mOnAddListener != null) {
            mOnAddListener.onAdd();
        }
    }

    private void updateEvent(String detail, String replacedle, EventDao eventDao) {
        int position = mSpinnerEventType.getSelectedItemPosition();
        mEvent.setreplacedle(replacedle);
        mEvent.setDetail(detail);
        mEvent.setType(position);
        eventDao.update(mEvent);
        if (mOnUpdateListener != null) {
            mOnUpdateListener.onUpdate();
        }
    }

    private void removeWithAnimationAndHideSoftInput() {
        mManager.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
        if (!isExiting) {
            isExiting = true;
            removeWithAnimation();
        }
    }

    private void removeWithAnimation() {
        Display display = mHostActivity.getWindowManager().getDefaultDisplay();
        Point outSize = new Point();
        display.getRealSize(outSize);
        int height = outSize.y;
        int width = outSize.x;
        Animator anim = ViewAnimationUtils.createCircularReveal(mContentView, width, 0, height, 0);
        anim.setDuration(500);
        anim.setInterpolator(new AccelerateDecelerateInterpolator());
        anim.addListener(new AnimatorListenerAdapter() {

            @Override
            public void onAnimationEnd(Animator animation) {
                mContentView.setVisibility(View.GONE);
                removeFragment(EditEventFragment.this);
            }
        });
        anim.start();
    }

    private void removeSelf() {
        isExiting = true;
        mManager.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
        removeFragment(this);
    }

    private void paste() {
        ClipboardManager clipboardManager = (ClipboardManager) mHostActivity.getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData primaryClip = clipboardManager.getPrimaryClip();
        final String message = primaryClip.gereplacedemAt(0).getText().toString();
        if (primaryClip.gereplacedemCount() > 0) {
            new AlertDialog.Builder(mHostActivity).setreplacedle("剪切板内容").setMessage(message).setPositiveButton("粘贴", (dialog, which) -> {
                mEditText.append(message);
                dialog.dismiss();
            }).setNegativeButton("取消", (dialog, which) -> dialog.dismiss()).show();
        } else {
            new AlertDialog.Builder(mHostActivity).setMessage("剪切板里什么也没有 >_<").show();
        }
    }

    private BaseAdapter mAdapter = new BaseAdapter() {

        Symbol[] symbols = Symbol.values();

        int[] resIds = { R.drawable.ic_rect_black_24dp, R.drawable.ic_circle_black_24dp, R.drawable.ic_triangle_black_24dp, R.drawable.ic_star_black_24dp, R.drawable.ic_favorite_black_24dp };

        @Override
        public int getCount() {
            return symbols.length;
        }

        @Override
        public Object gereplacedem(int position) {
            return symbols[position];
        }

        @Override
        public long gereplacedemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Symbol symbol = symbols[position];
            if (convertView == null) {
                convertView = LayoutInflater.from(mHostActivity).inflate(R.layout.spinner_item_symbol, null);
            }
            TextView textView = convertView.findViewById(R.id.tv);
            ImageView imageView = convertView.findViewById(R.id.iv);
            String comment = Setting.symbol_comment.get(symbol.KEY);
            textView.setText(comment);
            imageView.setImageResource(resIds[position]);
            return convertView;
        }
    };

    public void setOnUpdateListener(OnUpdateListener onUpdateListener) {
        this.mOnUpdateListener = onUpdateListener;
    }

    public void setOnAddListener(OnAddListener onAddListener) {
        this.mOnAddListener = onAddListener;
    }

    public void setOnDeleteListener(OnDeleteListener onDeleteListener) {
        this.mOnDeleteListener = onDeleteListener;
    }

    @Override
    public void onAnimationStart(Animator animation) {
    }

    @Override
    public void onAnimationEnd(Animator animation) {
        mManager = (InputMethodManager) mHostActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (mManager != null) {
            mManager.showSoftInput(mEditText, 0);
        }
    }

    @Override
    public void onAnimationCancel(Animator animation) {
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
    }

    @Override
    public void onSelectCancel() {
    }

    @Override
    public void onValueChange(int year, int month, int day) {
        String date = String.format(Locale.CHINA, "%s年%d月%d日", String.valueOf(year), month, day);
        mBtnDate.setText(date.substring(2));
    }

    @Override
    public void onSelectConfirm(int year, int month, int day) {
    }

    @Override
    public void onDismiss() {
        mEditText.requestFocus();
        mManager.showSoftInput(mEditText, 0);
    }

    public interface OnUpdateListener {

        void onUpdate();
    }

    public interface OnAddListener {

        void onAdd();
    }

    public interface OnDeleteListener {

        void onDelete();
    }
}

19 Source : OptionsActivity.java
with Apache License 2.0
from SmartisanTech

/**
 * Created by huangxin on 14-7-1.
 */
public clreplaced OptionsActivity extends Activity {

    private static final String TAG = "OptionsActivity";

    private ListView mOptionsList;

    private BaseAdapter mAdapter;

    private OptionsInfo mOptionsInfo;

    private String[] mOptions;

    private Object[] mValues;

    private Object mCurrentValue;

    private boolean mAutoFinishAfterSelect;

    public static final String EXTRA_OPTION_INFO = "extra_option_info";

    public static final String EXTRA_CURRENT_VALUE = "extra_current_value";

    public static final String EXTRA_AUTO_FINISH = "extra_auto_finish";

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.options_layout);
        replacedle replacedle = (replacedle) findViewById(R.id.view_replacedle);
        setreplacedleByIntent(replacedle);
        replacedle.setBackButtonListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                finish();
            }
        });
        mOptionsList = (ListView) findViewById(R.id.options_list);
        Intent intent = getIntent();
        // auto finish default
        mAutoFinishAfterSelect = intent.getBooleanExtra(EXTRA_AUTO_FINISH, true);
        if (intent.hasExtra(EXTRA_OPTION_INFO)) {
            mOptionsInfo = intent.getParcelableExtra(EXTRA_OPTION_INFO);
            mCurrentValue = intent.getStringExtra(EXTRA_CURRENT_VALUE);
            mOptions = mOptionsInfo.getOptionEntries();
            mValues = mOptionsInfo.getOptionValues();
        } else {
            LogUtils.e(TAG, "has no option info, finish.");
            finish();
            return;
        }
        mOptionsList.addHeaderView(Utils.inflateListTransparentHeader(this));
        mAdapter = new OptionsAdapter();
        mOptionsList.setAdapter(mAdapter);
        mOptionsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int index, long l) {
                index -= mOptionsList.getHeaderViewsCount();
                if (index < 0)
                    return;
                if (mOptionsInfo != null) {
                    if (mAutoFinishAfterSelect)
                        finish();
                    if (mOptionsInfo.save(OptionsActivity.this, index)) {
                        mCurrentValue = mValues[index].toString();
                        LogUtils.d(TAG, "onItemClick:  current:" + mCurrentValue);
                        mAdapter.notifyDataSetChanged();
                    }
                }
            }
        });
    }

    protected void setreplacedleByIntent(replacedle replacedle) {
        if (getIntent().hasExtra(replacedle.EXTRA_replacedLE_TEXT)) {
            String replacedleStr = getIntent().getStringExtra(replacedle.EXTRA_replacedLE_TEXT);
            if (!TextUtils.isEmpty(replacedleStr)) {
                replacedle.setreplacedle(replacedleStr);
            }
        }
    }

    @Override
    public void finish() {
        super.finish();
        if (getIntent() != null) {
            int[] anims = getIntent().getIntArrayExtra(IntentSmt.EXTRA_SMARTISAN_ANIM_RESOURCE_ID);
            if (anims != null) {
                overridePendingTransition(anims[0], anims[1]);
            }
        }
    }

    private clreplaced OptionsAdapter extends BaseAdapter {

        LayoutInflater mInflater;

        public OptionsAdapter() {
            mInflater = LayoutInflater.from(OptionsActivity.this);
        }

        @Override
        public int getCount() {
            return mOptions.length;
        }

        @Override
        public Object gereplacedem(int i) {
            return mOptions[i];
        }

        @Override
        public long gereplacedemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View convertView, ViewGroup viewGroup) {
            ViewHolder holder;
            if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) {
                holder = new ViewHolder();
                convertView = mInflater.inflate(R.layout.option_item_layout, null);
                holder.mOptionreplacedle = (TextView) convertView.findViewById(R.id.option_replacedle);
                holder.mOptionCheckedImg = (ImageView) convertView.findViewById(R.id.option_checked);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            if (getCount() == 1) {
                convertView.setBackgroundResource(R.drawable.selector_setting_sub_item_bg_single);
            } else if (i == 0) {
                convertView.setBackgroundResource(R.drawable.selector_setting_sub_item_bg_top);
            } else if (i == getCount() - 1) {
                convertView.setBackgroundResource(R.drawable.selector_setting_sub_item_bg_bottom);
            } else {
                convertView.setBackgroundResource(R.drawable.selector_setting_sub_item_bg_middle);
            }
            holder.mOptionreplacedle.setText(mOptions[i]);
            holder.mOptionCheckedImg.setVisibility((mValues[i] == null && mCurrentValue == null) || mValues[i].toString().equals(mCurrentValue) ? View.VISIBLE : View.GONE);
            return convertView;
        }
    }

    static clreplaced ViewHolder {

        TextView mOptionreplacedle;

        ImageView mOptionCheckedImg;
    }
}

19 Source : MainActivity.java
with Apache License 2.0
from RealMoMo

// 弹出对话框
private void showDialog(String replacedle, BaseAdapter adapter, DialogInterface.OnClickListener listener) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setreplacedle(replacedle);
    builder.setAdapter(adapter, listener);
    builder.show();
}

19 Source : NavBean.java
with GNU General Public License v3.0
from qizhenghao

/**
 * Created by qizhenghao on 16/11/7.
 *
 * 导航栏bean信息
 */
public clreplaced NavBean {

    public static int TYPE_CURRENT;

    // 是否需要吸附
    public static boolean IS_NEED_ATTACH = true;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({ TYPE_REPOST, TYPE_COMMENT, TYPE_LIKE })
    public @interface TYPE {
    }

    public static final int TYPE_REPOST = 1;

    public static final int TYPE_COMMENT = 2;

    public static final int TYPE_LIKE = 3;

    public NavBean(@TYPE int type, BaseAdapter adapter) {
        this.type = type;
        this.adapter = adapter;
        switch(type) {
            case TYPE_REPOST:
                replacedle = "转发";
                break;
            case TYPE_COMMENT:
                replacedle = "评论";
                break;
            case TYPE_LIKE:
                replacedle = "赞";
                break;
        }
    }

    public BaseAdapter adapter;

    public String replacedle;

    // 展示的数据量
    public int count;

    // 参考TYPE
    public int type;

    // 是否可以加载更多
    public boolean hasMore = false;

    // 是否是刷新
    public boolean isRefresh = true;

    public int pageNo = 1;

    public int pageSize = 10;

    // 第一条可见的位置
    private int firstVisibleItem;

    // 距离顶部的位置
    private int topDistance;

    // 存储上一次的
    public static int topDistanceUniversal;

    // 存储上一次的
    public static int firstVisibleItemUniversal;

    public int getFirstVisibleItem() {
        return firstVisibleItem;
    }

    public int getTopDistance() {
        return topDistance;
    }

    public void setTopDistance(int topDistance) {
        this.topDistance = topDistance;
        topDistanceUniversal = topDistance;
    }

    public void setFirstVisibleItem(int firstVisibleItem) {
        this.firstVisibleItem = firstVisibleItem;
        firstVisibleItemUniversal = firstVisibleItem;
    }
}

19 Source : RedPointActivity.java
with Apache License 2.0
from pop1234o

public clreplaced RedPointActivity extends Activity implements View.OnTouchListener {

    private BaseAdapter adapter1 = new BaseAdapter() {

        @Override
        public int getCount() {
            return 10;
        }

        @Override
        public Object gereplacedem(int position) {
            return null;
        }

        @Override
        public long gereplacedemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(RedPointActivity.this).inflate(R.layout.item_list, null);
            }
            View viewById = convertView.findViewById(R.id.view);
            viewById.setOnTouchListener(RedPointActivity.this);
            return convertView;
        }
    };

    private View inflate;

    private PointView pointview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_red_point);
        ListView listview = (ListView) findViewById(R.id.listview);
        listview.setAdapter(adapter1);
    }

    @Override
    public boolean onTouch(final View v, MotionEvent event) {
        switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                ViewParent parent = v.getParent();
                if (parent == null) {
                    return false;
                }
                parent.requestDisallowInterceptTouchEvent(true);
                inflate = LayoutInflater.from(this).inflate(R.layout.layout_drag, null);
                pointview = (PointView) inflate.findViewById(R.id.pointview);
                PointLayout pointlayout = (PointLayout) inflate.findViewById(R.id.pointlayout);
                pointlayout.setOnRemoveListenter(new PointLayout.OnRemoveListenter() {

                    @Override
                    public void onRemove() {
                        v.setVisibility(View.GONE);
                    }

                    @Override
                    public void onRestore() {
                        v.setVisibility(View.VISIBLE);
                    }
                });
                pointview.setView(v);
                ViewGroup viewGroup = (ViewGroup) v.getRootView();
                viewGroup.addView(inflate);
                v.setVisibility(View.INVISIBLE);
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                break;
        }
        pointview.onTouchEvent(event);
        return true;
    }
}

19 Source : CustomAlertDialog.java
with MIT License
from netease-im

public void setAdapter(final BaseAdapter adapter, final OnClickListener listener) {
    listAdapter = adapter;
    listListener = listener;
    itemListener = new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            dismiss();
            listListener.onClick(CustomAlertDialog.this, position);
        }
    };
}

19 Source : JecListPreference.java
with GNU General Public License v3.0
from MrIkso

/**
 * @author Jecelyin Peng <[email protected]>
 */
public clreplaced JecListPreference extends ListPreference {

    private BaseAdapter adapter;

    public JecListPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public JecListPreference(Context context) {
        super(context);
    }

    public void setAdapter(BaseAdapter adapter) {
        this.adapter = adapter;
    }
}

19 Source : JecListPreference.java
with GNU General Public License v3.0
from MrIkso

public void setAdapter(BaseAdapter adapter) {
    this.adapter = adapter;
}

19 Source : PanelListAdapter.java
with Apache License 2.0
from huashengzzz

/**
 * 设置纵向表头的适配器
 *
 * @param columnAdapter adapter of column ListView
 */
public void setColumnAdapter(BaseAdapter columnAdapter) {
    this.columnAdapter = columnAdapter;
}

19 Source : FriendRefreshView.java
with MIT License
from GitLqr

public void setAdapter(BaseAdapter adapter) {
    if (mContentView != null) {
        mContentView.setAdapter(adapter);
    }
}

19 Source : LazyThumbnailLoader.java
with GNU General Public License v3.0
from ericberman

public clreplaced LazyThumbnailLoader implements Runnable, ImageCacheCompleted {

    private final ThumbnailedItem[] m_rgItems;

    private final BaseAdapter m_li;

    public interface ThumbnailedItem {

        MFBImageInfo getDefaultImage();
    }

    public LazyThumbnailLoader(ThumbnailedItem[] rgItems, BaseAdapter li) {
        m_rgItems = rgItems;
        m_li = li;
    }

    private void getNextThumb() {
        if (m_rgItems == null)
            return;
        for (ThumbnailedItem ti : m_rgItems) {
            if (ti == null)
                continue;
            MFBImageInfo mfbii = ti.getDefaultImage();
            if (mfbii != null) {
                Bitmap b = mfbii.bitmapFromThumb();
                if (b == null) {
                    mfbii.LoadImageAsync(true, this);
                    return;
                }
            }
        }
    }

    public void run() {
        getNextThumb();
    }

    public void imgCompleted(MFBImageInfo sender) {
        m_li.notifyDataSetChanged();
        getNextThumb();
    }
}

19 Source : LinearLayoutForListView.java
with Apache License 2.0
from djzhao627

/**
 * Created by djzhao on 17/05/02.
 */
public clreplaced LinearLayoutForListView extends LinearLayout {

    private BaseAdapter adapter;

    private OnClickListener onClickListener = null;

    public LinearLayoutForListView(Context context) {
        super(context);
    }

    public void bindLinearLayout() {
        int count = adapter.getCount();
        this.removeAllViews();
        for (int i = 0; i < count; i++) {
            View v = adapter.getView(i, null, null);
            v.setOnClickListener(this.onClickListener);
            addView(v, i);
        }
        Log.v("countTAG", "" + count);
    }

    public void setAdapter(BaseAdapter adapter) {
        this.adapter = adapter;
    }
}

19 Source : LinearLayoutForListView.java
with Apache License 2.0
from devallever

/**
 * Created by XM on 2016/4/19.
 */
public clreplaced LinearLayoutForListView extends LinearLayout {

    private BaseAdapter adapter;

    private View.OnClickListener onClickListener = null;

    public void bindLinearLayout() {
        int count = adapter.getCount();
        this.removeAllViews();
        for (int i = 0; i < count; i++) {
            View v = adapter.getView(i, null, null);
            v.setOnClickListener(this.onClickListener);
            addView(v, i);
        }
        Log.v("countTAG", "" + count);
    }

    public LinearLayoutForListView(Context context) {
        super(context);
    }
}

19 Source : BannerPageView.java
with Apache License 2.0
from chengkun123

public void setAdapter(BaseAdapter adapter) {
    setAdapter(new BannerPagerAdapter());
    mAdapter = adapter;
    // 监听Activity生命周期
    mActivity.getApplication().registerActivityLifecycleCallbacks(mActivityCallbacks);
}

19 Source : ChooseSavegameDialog.java
with GNU General Public License v3.0
from cgeo

public clreplaced ChooseSavegameDialog extends CustomDialogFragment {

    private static final String SAVE_FILE = "SAVE_FILE";

    private static final String TAG = "ChooseSavegameDialog";

    private File saveFile;

    private ArrayList<DataInfo> data;

    private BaseAdapter adapter;

    public ChooseSavegameDialog() {
        super();
    }

    public static ChooseSavegameDialog newInstance(File saveFile) {
        ChooseSavegameDialog savegameDialog = new ChooseSavegameDialog();
        Bundle bundle = new Bundle();
        bundle.putString(SAVE_FILE, saveFile.getAbsolutePath());
        savegameDialog.setArguments(bundle);
        return savegameDialog;
    }

    private boolean restoreInstance(Bundle bundle) {
        if (bundle == null) {
            return false;
        }
        String saveFileName = bundle.getString(SAVE_FILE);
        if (saveFileName == null) {
            return false;
        }
        saveFile = new File(saveFileName);
        return true;
    }

    @Override
    public Dialog createDialog(Bundle savedInstanceState) {
        if (A.getMain() == null) {
            return null;
        }
        if (!(restoreInstance(savedInstanceState) || restoreInstance(getArguments()))) {
            return null;
        }
        // prepare list
        data = new ArrayList<>();
        data.add(new DataInfo(getString(R.string.save_file_new), ""));
        File file;
        if ((file = saveFile).exists()) {
            data.add(new DataInfo(getString(R.string.save_file_main), UtilsFormat.formatDatetime(file.lastModified()), file));
        }
        if ((file = new File(saveFile.getAbsolutePath() + ".bak")).exists()) {
            data.add(new DataInfo(getString(R.string.save_file_backup), UtilsFormat.formatDatetime(file.lastModified()), file));
        }
        for (int slot = 1; slot <= Preferences.GLOBAL_SAVEGAME_SLOTS; ++slot) {
            if ((file = new File(saveFile.getAbsolutePath() + "." + slot)).exists()) {
                data.add(new DataInfo(String.format("%s %d", getString(R.string.save_game_slot), slot), UtilsFormat.formatDatetime(file.lastModified()), file));
            }
        }
        // create listView
        ListView listView = UtilsGUI.createListView(getActivity(), false, data);
        // set click listener
        listView.setOnItemClickListener((parent, view, position, id) -> itemClicked(position));
        // set on long click listener for file deletion
        listView.setOnItemLongClickListener((parent, view, position, id) -> {
            itemLongClicked(position);
            return true;
        });
        adapter = (BaseAdapter) listView.getAdapter();
        // construct dialog
        return new AlertDialog.Builder(getActivity()).setreplacedle(R.string.load_game).setIcon(R.drawable.ic_replacedle_logo).setView(listView).setNeutralButton(R.string.close, null).create();
    }

    private void itemClicked(int position) {
        if (position == 0) {
            MainActivity.wui.showScreen(WUI.SCREEN_CART_DETAIL, null);
            dismiss();
            return;
        }
        try {
            FileSystem.copyFile((File) data.remove(position).addData01, saveFile);
            MainActivity.startSelectedCartridge(true);
            dismiss();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void itemLongClicked(final int position) {
        if (position == 0)
            return;
        UtilsGUI.showDialogQuestion(getActivity(), R.string.delete_save_game, (dialog, btn) -> {
            ((File) data.remove(position).addData01).delete();
            if (adapter != null)
                adapter.notifyDataSetChanged();
        }, null);
    }

    public void setParams(File saveFile) {
        this.saveFile = saveFile;
    }
}

19 Source : InfiniteCardView.java
with Apache License 2.0
from BakerJQ

/**
 * @author BakerJ
 *         https://github.com/BakerJQ/InfiniteCards
 */
public clreplaced InfiniteCardView extends ViewGroup {

    /*
     * Three types of animation
     * ANIM_TYPE_FRONT:custom animation for chosen card, common animation for other cards
     * ANIM_TYPE_SWITCH:switch the position by custom animation of the first card and the chosen card
     * ANIM_TYPE_FRONT_TO_LAST:moving the first card to last position by custom animation, common animation for others
     */
    public static final int ANIM_TYPE_FRONT = 0, ANIM_TYPE_SWITCH = 1, ANIM_TYPE_FRONT_TO_LAST = 2;

    // cardHeight / cardWidth = CARD_SIZE_RATIO
    private static final float CARD_SIZE_RATIO = 0.5f;

    // cardHeight / cardWidth = mCardRatio
    private float mCardRatio = CARD_SIZE_RATIO;

    // animation helper
    private CardAnimationHelper mAnimationHelper;

    // view adapter
    private BaseAdapter mAdapter;

    private int mCardWidth, mCardHeight;

    public InfiniteCardView(@NonNull Context context) {
        this(context, null);
    }

    public InfiniteCardView(@NonNull Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public InfiniteCardView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
        setClickable(true);
    }

    private void init(Context context, AttributeSet attrs) {
        int animType = ANIM_TYPE_FRONT;
        int animDuration = CardAnimationHelper.ANIM_DURATION;
        int animAddRemoveDuration = CardAnimationHelper.ANIM_ADD_REMOVE_DURATION;
        int animAddRemoveDelay = CardAnimationHelper.ANIM_ADD_REMOVE_DELAY;
        if (attrs != null) {
            TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.InfiniteCardView);
            animType = ta.getInt(R.styleable.InfiniteCardView_animType, ANIM_TYPE_FRONT);
            mCardRatio = ta.getFloat(R.styleable.InfiniteCardView_cardRatio, CARD_SIZE_RATIO);
            animDuration = ta.getInt(R.styleable.InfiniteCardView_animDuration, CardAnimationHelper.ANIM_DURATION);
            animAddRemoveDuration = ta.getInt(R.styleable.InfiniteCardView_animAddRemoveDuration, CardAnimationHelper.ANIM_ADD_REMOVE_DURATION);
            animAddRemoveDelay = ta.getInt(R.styleable.InfiniteCardView_animAddRemoveDelay, CardAnimationHelper.ANIM_ADD_REMOVE_DELAY);
            ta.recycle();
        }
        mAnimationHelper = new CardAnimationHelper(animType, animDuration, this);
        mAnimationHelper.setAnimAddRemoveDuration(animAddRemoveDuration);
        mAnimationHelper.setAnimAddRemoveDelay(animAddRemoveDelay);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
        int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
        measureChildren(widthMeasureSpec, heightMeasureSpec);
        if (widthMode != MeasureSpec.EXACTLY || heightMode != MeasureSpec.EXACTLY) {
            int childCount = getChildCount();
            int childWidth = 0, childHeight = 0;
            for (int i = 0; i < childCount; i++) {
                View childView = getChildAt(i);
                childWidth = Math.max(childView.getMeasuredWidth(), childWidth);
                childHeight = Math.max(childView.getMeasuredHeight(), childHeight);
            }
            setMeasuredDimension((widthMode == MeasureSpec.EXACTLY) ? sizeWidth : childWidth, (heightMode == MeasureSpec.EXACTLY) ? sizeHeight : childHeight);
        } else {
            setMeasuredDimension(sizeWidth, sizeHeight);
        }
        if (mCardWidth == 0 || mCardHeight == 0) {
            setCardSize(true);
        }
    }

    private void setCardSize(boolean resetAdapter) {
        mCardWidth = getMeasuredWidth();
        mCardHeight = (int) (mCardWidth * mCardRatio);
        mAnimationHelper.setCardSize(mCardWidth, mCardHeight);
        mAnimationHelper.initAdapterView(mAdapter, resetAdapter);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int childCount = getChildCount();
        int childWidth, childHeight;
        int childLeft, childTop, childRight, childBottom;
        int width = getWidth(), height = getHeight();
        for (int i = 0; i < childCount; i++) {
            View childView = getChildAt(i);
            childWidth = childView.getMeasuredWidth();
            childHeight = childView.getMeasuredHeight();
            childLeft = (width - childWidth) / 2;
            childTop = (height - childHeight) / 2;
            childRight = childLeft + childWidth;
            childBottom = childTop + childHeight;
            childView.layout(childLeft, childTop, childRight, childBottom);
        }
    }

    void addCardView(CardItem card) {
        addView(getCardView(card));
    }

    void addCardView(CardItem card, int position) {
        addView(getCardView(card), position);
    }

    private View getCardView(final CardItem card) {
        View view = card.view;
        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(mCardWidth, mCardHeight);
        view.setLayoutParams(layoutParams);
        view.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                bringCardToFront(card);
            }
        });
        return view;
    }

    private void bringCardToFront(CardItem card) {
        if (!isClickable()) {
            return;
        }
        mAnimationHelper.bringCardToFront(card);
    }

    /**
     * bring the specific position card to front
     *
     * @param position position
     */
    public void bringCardToFront(int position) {
        mAnimationHelper.bringCardToFront(position);
    }

    /**
     * set view adapter
     *
     * @param adapter adapter
     */
    public void setAdapter(BaseAdapter adapter) {
        this.mAdapter = adapter;
        mAdapter.registerDataSetObserver(new DataSetObserver() {

            @Override
            public void onChanged() {
                mAnimationHelper.notifyDataSetChanged(mAdapter);
            }
        });
        mAnimationHelper.initAdapterView(adapter, true);
    }

    public void setTransformerToFront(AnimationTransformer toFrontTransformer) {
        mAnimationHelper.setTransformerToFront(toFrontTransformer);
    }

    public void setTransformerToBack(AnimationTransformer toBackTransformer) {
        mAnimationHelper.setTransformerToBack(toBackTransformer);
    }

    public void setCommonSwitchTransformer(AnimationTransformer commonTransformer) {
        mAnimationHelper.setCommonSwitchTransformer(commonTransformer);
    }

    public void setTransformerCommon(AnimationTransformer transformerCommon) {
        mAnimationHelper.setTransformerCommon(transformerCommon);
    }

    public void setZIndexTransformerToFront(ZIndexTransformer zIndexTransformerToFront) {
        mAnimationHelper.setZIndexTransformerToFront(zIndexTransformerToFront);
    }

    public void setZIndexTransformerToBack(ZIndexTransformer zIndexTransformerToBack) {
        mAnimationHelper.setZIndexTransformerToBack(zIndexTransformerToBack);
    }

    public void setZIndexTransformerCommon(ZIndexTransformer zIndexTransformerCommon) {
        mAnimationHelper.setZIndexTransformerCommon(zIndexTransformerCommon);
    }

    public void setAnimInterpolator(Interpolator animInterpolator) {
        mAnimationHelper.setAnimInterpolator(animInterpolator);
    }

    public void setAnimType(int animType) {
        mAnimationHelper.setAnimType(animType);
    }

    public void setTransformerAnimAdd(AnimationTransformer transformerAnimAdd) {
        mAnimationHelper.setTransformerAnimAdd(transformerAnimAdd);
    }

    public void setTransformerAnimRemove(AnimationTransformer transformerAnimRemove) {
        mAnimationHelper.setTransformerAnimRemove(transformerAnimRemove);
    }

    public void setAnimAddRemoveInterpolator(Interpolator animAddRemoveInterpolator) {
        mAnimationHelper.setAnimAddRemoveInterpolator(animAddRemoveInterpolator);
    }

    public void setCardSizeRatio(float cardSizeRatio) {
        this.mCardRatio = cardSizeRatio;
        setCardSize(false);
    }

    public boolean isAnimating() {
        return mAnimationHelper.isAnimating();
    }

    public void setCardAnimationListener(CardAnimationListener cardAnimationListener) {
        mAnimationHelper.setCardAnimationListener(cardAnimationListener);
    }

    public static interface CardAnimationListener {

        void onAnimationStart();

        void onAnimationEnd();
    }
}

19 Source : CardAnimationHelper.java
with Apache License 2.0
from BakerJQ

/**
 * @author BakerJ
 */
clreplaced CardAnimationHelper implements Animator.AnimatorListener, ValueAnimator.AnimatorUpdateListener {

    // animation duration
    static final int ANIM_DURATION = 1000, ANIM_ADD_REMOVE_DELAY = 200, ANIM_ADD_REMOVE_DURATION = 500;

    // animation type
    private int mAnimType = InfiniteCardView.ANIM_TYPE_FRONT;

    // animation duration
    private int mAnimDuration = ANIM_DURATION, mAnimAddRemoveDelay = ANIM_ADD_REMOVE_DELAY, mAnimAddRemoveDuration = ANIM_ADD_REMOVE_DURATION;

    // card container view
    private InfiniteCardView mCardView;

    // card item list
    private LinkedList<CardItem> mCards;

    // total card count
    private int mCardCount;

    // card width, card height
    // for judge Z index
    // private ArrayList<CardItem> mCards4JudgeZIndex;
    // current card moving to back, current card moving to front
    private CardItem mCardToBack, mCardToFront;

    // current card position moving to front, current card position moving to front
    private int mPositionToBack = 0, mPositionToFront = 0;

    private int mCardWidth, mCardHeight;

    // is doing animation now
    private boolean mIsAnim = false, mIsAddRemoveAnim = false;

    // animator
    private ValueAnimator mValueAnimator;

    // custom animation transformer for card moving to front, card moving to back, and common card
    private AnimationTransformer mTransformerToFront, mTransformerToBack, mTransformerCommon;

    // custom animation transformer for card add and remove
    private AnimationTransformer mTransformerAnimAdd, mTransformerAnimRemove;

    // custom Z index transformer for card moving to front, card moving to back, and common card
    private ZIndexTransformer mZIndexTransformerToFront, mZIndexTransformerToBack, mZIndexTransformerCommon;

    // animation interpolator
    private Interpolator mAnimInterpolator, mAnimAddRemoveInterpolator;

    // view adapter needs to be notify while animation
    private BaseAdapter mTempAdapter;

    // current animation fraction
    private float mCurrentFraction = 1;

    // animation listener
    private InfiniteCardView.CardAnimationListener mCardAnimationListener;

    CardAnimationHelper(int mAnimType, int mAnimDuration, InfiniteCardView infiniteCardView) {
        this.mAnimType = mAnimType;
        this.mAnimDuration = mAnimDuration;
        this.mCardView = infiniteCardView;
        initTransformer();
        initAnimator();
    }

    private void initTransformer() {
        mAnimInterpolator = new LinearInterpolator();
        mAnimAddRemoveInterpolator = new LinearInterpolator();
        mTransformerToFront = new DefaultTransformerToFront();
        mTransformerToBack = new DefaultTransformerToBack();
        mTransformerCommon = new DefaultCommonTransformer();
        mTransformerAnimAdd = new DefaultTransformerAdd();
        mTransformerAnimRemove = new DefaultTransformerRemove();
        mZIndexTransformerToFront = new DefaultZIndexTransformerToFront();
        mZIndexTransformerToBack = new DefaultZIndexTransformerCommon();
        mZIndexTransformerCommon = new DefaultZIndexTransformerCommon();
    }

    /**
     * setup animator
     */
    private void initAnimator() {
        mValueAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mAnimDuration);
        mValueAnimator.addUpdateListener(this);
        mValueAnimator.addListener(this);
    }

    /**
     * do animation while update
     *
     * @param animation animation
     */
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        mCurrentFraction = (float) animation.getAnimatedValue();
        float fractionInterpolated = mCurrentFraction;
        if (mAnimInterpolator != null) {
            fractionInterpolated = mAnimInterpolator.getInterpolation(mCurrentFraction);
        }
        doAnimationBackToFront(mCurrentFraction, fractionInterpolated);
        doAnimationFrontToBack(mCurrentFraction, fractionInterpolated);
        doAnimationCommon(mCurrentFraction, fractionInterpolated);
        bringToFrontByZIndex();
    }

    /**
     * do animation for card moving from back to front
     *
     * @param fraction             animation progress from 0.0f to 1.0f
     * @param fractionInterpolated interpolated animation progress
     */
    private void doAnimationBackToFront(float fraction, float fractionInterpolated) {
        mTransformerToFront.transformAnimation(mCardToFront.view, fraction, mCardWidth, mCardHeight, mPositionToFront, 0);
        if (mAnimInterpolator != null) {
            mTransformerToFront.transformInterpolatedAnimation(mCardToFront.view, fractionInterpolated, mCardWidth, mCardHeight, mPositionToFront, 0);
        }
        doAnimationZIndex(mZIndexTransformerToFront, mCardToFront, fraction, fractionInterpolated, mPositionToFront, 0);
    }

    /**
     * do animation for card moving from from to back
     *
     * @param fraction             animation progress from 0.0f to 1.0f
     * @param fractionInterpolated interpolated animation progress
     */
    private void doAnimationFrontToBack(float fraction, float fractionInterpolated) {
        if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT) {
            return;
        }
        mTransformerToBack.transformAnimation(mCardToBack.view, fraction, mCardWidth, mCardHeight, 0, mPositionToBack);
        if (mAnimInterpolator != null) {
            mTransformerToBack.transformInterpolatedAnimation(mCardToBack.view, fractionInterpolated, mCardWidth, mCardHeight, 0, mPositionToBack);
        }
        doAnimationZIndex(mZIndexTransformerToBack, mCardToBack, fraction, fractionInterpolated, 0, mPositionToBack);
    }

    /**
     * do animation for common card items
     *
     * @param fraction             animation progress from 0.0f to 1.0f
     * @param fractionInterpolated interpolated animation progress
     */
    private void doAnimationCommon(float fraction, float fractionInterpolated) {
        if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT) {
            for (int i = 0; i < mPositionToFront; i++) {
                CardItem card = mCards.get(i);
                doAnimationCommonView(card.view, fraction, fractionInterpolated, i, i + 1);
                doAnimationZIndex(mZIndexTransformerCommon, card, fraction, fractionInterpolated, i, i + 1);
            }
        } else if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT_TO_LAST) {
            for (int i = mPositionToFront + 1; i < mCardCount; i++) {
                CardItem card = mCards.get(i);
                doAnimationCommonView(card.view, fraction, fractionInterpolated, i, i - 1);
                doAnimationZIndex(mZIndexTransformerCommon, card, fraction, fractionInterpolated, i, i - 1);
            }
        }
    }

    /**
     * do animation for common card views
     *
     * @param view                 card view
     * @param fraction             animation progress from 0.0f to 1.0f
     * @param fractionInterpolated interpolated animation progress
     * @param fromPosition         card moving from
     * @param toPosition           card moving to
     */
    private void doAnimationCommonView(View view, float fraction, float fractionInterpolated, int fromPosition, int toPosition) {
        mTransformerCommon.transformAnimation(view, fraction, mCardWidth, mCardHeight, fromPosition, toPosition);
        if (mAnimInterpolator != null) {
            mTransformerCommon.transformInterpolatedAnimation(view, fractionInterpolated, mCardWidth, mCardHeight, fromPosition, toPosition);
        }
    }

    /**
     * do calculation for card Z index
     *
     * @param transformer          Z index transformer
     * @param card                 card item
     * @param fraction             animation progress from 0.0f to 1.0f
     * @param fractionInterpolated interpolated animation progress
     * @param fromPosition         card moving from
     * @param toPosition           card moving to
     */
    private void doAnimationZIndex(ZIndexTransformer transformer, CardItem card, float fraction, float fractionInterpolated, int fromPosition, int toPosition) {
        transformer.transformAnimation(card, fraction, mCardWidth, mCardHeight, fromPosition, toPosition);
        if (mAnimInterpolator != null) {
            transformer.transformInterpolatedAnimation(card, fractionInterpolated, mCardWidth, mCardHeight, fromPosition, toPosition);
        }
    }

    /**
     * bring card to front by Z index, the card with smaller Z index is in front of the card with
     * bigger Z index
     */
    private void bringToFrontByZIndex() {
        if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT) {
            // if the animation type is ANIM_TYPE_FRONT, which means other cards are under common
            // animation, so start cycling the card items from the position before the moving
            // card, and while the moving card's Z index is smaller than an other card, we
            // call bringToFront for it, otherwise we call bringToFront for other cards
            for (int i = mPositionToFront - 1; i >= 0; i--) {
                CardItem card = mCards.get(i);
                if (card.zIndex > mCardToFront.zIndex) {
                    mCardToFront.view.bringToFront();
                    mCardView.updateViewLayout(mCardToFront.view, mCardToFront.view.getLayoutParams());
                } else {
                    card.view.bringToFront();
                    mCardView.updateViewLayout(card.view, card.view.getLayoutParams());
                }
            }
        } else {
            // sort the card items by Z index and call bringToFront foreach view
            // Collections.sort(mCards4JudgeZIndex, this);
            // for (int i = mCardCount - 1; i >= 0; i--) {
            // mCards4JudgeZIndex.get(i).view.bringToFront();
            // }
            // ##########################for better performance#########################
            // is card moving to front called bringToFront
            boolean cardToFrontBrought = false;
            // cycling the card items
            for (int i = mCardCount - 1; i > 0; i--) {
                CardItem card = mCards.get(i);
                // get the card before current card
                CardItem cardPre = i > 1 ? mCards.get(i - 1) : null;
                // is card moving to back behind the card before current card
                boolean cardToBackBehindCardPre = cardPre == null || mCardToBack.zIndex > cardPre.zIndex;
                // if the card moving to back Z index is smaller than current card, and is behind
                // the card before current card, we should call bringToFront for it
                boolean bringCardToBackViewToFront = mCardToBack.zIndex < card.zIndex && cardToBackBehindCardPre;
                // is card moving to front behind the current card
                boolean cardToFrontBehindCardPre = cardPre == null || mCardToFront.zIndex > cardPre.zIndex;
                // if the card moving to front Z index is smaller than current card, and is behind
                // the card before current card, we should call bringToFront for it
                boolean bringCardToFrontViewToFront = mCardToFront.zIndex < card.zIndex && cardToFrontBehindCardPre;
                // if current card is not the card moving to front
                if (i != mPositionToFront) {
                    // call bringToFront for it
                    card.view.bringToFront();
                    mCardView.updateViewLayout(card.view, card.view.getLayoutParams());
                    // if we should bring the card moving to back to front, just do it
                    if (bringCardToBackViewToFront) {
                        mCardToBack.view.bringToFront();
                        mCardView.updateViewLayout(mCardToBack.view, mCardToBack.view.getLayoutParams());
                    }
                    // if we should bring the card moving to front to front, just do it
                    if (bringCardToFrontViewToFront) {
                        mCardToFront.view.bringToFront();
                        mCardView.updateViewLayout(mCardToFront.view, mCardToFront.view.getLayoutParams());
                        cardToFrontBrought = true;
                    }
                    // if we has both bring the card moving to front and back to front, and the
                    // card moving to back Z index is smaller than the card moving to front Z
                    // index, we call bringToFront for the card moving to back
                    if (bringCardToBackViewToFront && bringCardToFrontViewToFront && mCardToBack.zIndex < mCardToFront.zIndex) {
                        mCardToBack.view.bringToFront();
                        mCardView.updateViewLayout(mCardToBack.view, mCardToBack.view.getLayoutParams());
                    }
                } else {
                    // if current card is the card moving to front, and behind the card before
                    if (cardToFrontBehindCardPre) {
                        mCardToFront.view.bringToFront();
                        mCardView.updateViewLayout(mCardToFront.view, mCardToFront.view.getLayoutParams());
                        cardToFrontBrought = true;
                        // if the card moving to back Z index is smaller than the card moving to
                        // front, call bringToFront for it
                        if (cardToBackBehindCardPre && mCardToBack.zIndex < mCardToFront.zIndex) {
                            mCardToBack.view.bringToFront();
                            mCardView.updateViewLayout(mCardToBack.view, mCardToBack.view.getLayoutParams());
                        }
                    }
                }
            }
            // it the card moving to front has not call bringToFront yet, which means it is
            // already in the first position, call bringToFront for it
            if (!cardToFrontBrought) {
                mCardToFront.view.bringToFront();
                mCardView.updateViewLayout(mCardToFront.view, mCardToFront.view.getLayoutParams());
            }
        }
    }

    @Override
    public void onAnimationStart(Animator animation) {
        mCurrentFraction = 0;
        if (mCardAnimationListener != null) {
            mCardAnimationListener.onAnimationStart();
        }
    }

    /**
     * animation end
     *
     * @param animation animation
     */
    @Override
    public void onAnimationEnd(Animator animation) {
        if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT) {
            // move the card moving to front to the first position
            mCards.remove(mPositionToFront);
            mCards.addFirst(mCardToFront);
        } else if (mAnimType == InfiniteCardView.ANIM_TYPE_SWITCH) {
            // switch the position of the card moving to front and back
            mCards.remove(mPositionToFront);
            mCards.removeFirst();
            mCards.addFirst(mCardToFront);
            mCards.add(mPositionToFront, mCardToBack);
        } else {
            // moving the first position card to last
            mCards.remove(mPositionToFront);
            mCards.removeFirst();
            mCards.addFirst(mCardToFront);
            mCards.addLast(mCardToBack);
        }
        mPositionToFront = 0;
        mPositionToBack = 0;
        mCurrentFraction = 1;
        mIsAnim = false;
        if (mTempAdapter != null) {
            notifyDataSetChanged(mTempAdapter);
        }
        if (mCardAnimationListener != null) {
            mCardAnimationListener.onAnimationEnd();
        }
    }

    @Override
    public void onAnimationCancel(Animator animation) {
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
    }

    /**
     * init adapter view
     *
     * @param adapter adapter
     */
    void initAdapterView(BaseAdapter adapter, boolean reset) {
        if (mCardWidth > 0 && mCardHeight > 0) {
            if (mCards == null) {
                mCardView.removeAllViews();
                firstSetAdapter(adapter);
            } else if (reset || mCards.size() != adapter.getCount()) {
                resetAdapter(adapter);
            } else {
                notifySetAdapter(adapter);
            }
        }
    }

    /**
     * reset adapter view
     *
     * @param adapter adapter
     */
    private void resetAdapter(BaseAdapter adapter) {
        if (mTransformerAnimRemove == null) {
            mCardView.removeAllViews();
            firstSetAdapter(adapter);
        } else {
            mIsAddRemoveAnim = true;
            for (int i = 0; i < mCardCount; i++) {
                CardItem cardItem = mCards.get(i);
                showAnimRemove(cardItem.view, mAnimAddRemoveDelay * i, i, i == mCardCount - 1, adapter);
            }
        }
    }

    private void showAnimRemove(final View view, int delay, final int position, final boolean isLast, final BaseAdapter adapter) {
        final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mAnimAddRemoveDuration);
        valueAnimator.setStartDelay(delay);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float fraction = (float) animation.getAnimatedValue();
                mTransformerAnimRemove.transformAnimation(view, fraction, mCardWidth, mCardHeight, position, position);
                if (mAnimAddRemoveInterpolator != null) {
                    mTransformerAnimRemove.transformInterpolatedAnimation(view, mAnimAddRemoveInterpolator.getInterpolation(fraction), mCardWidth, mCardHeight, position, position);
                }
            }
        });
        valueAnimator.addListener(new Animator.AnimatorListener() {

            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                view.setVisibility(View.GONE);
                if (isLast) {
                    mIsAddRemoveAnim = false;
                    mCardView.removeAllViews();
                    if (mTempAdapter != null) {
                        notifyDataSetChanged(mTempAdapter);
                    } else {
                        firstSetAdapter(adapter);
                    }
                }
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        mCardView.post(new Runnable() {

            @Override
            public void run() {
                valueAnimator.start();
            }
        });
    }

    /**
     * first time set an adapter
     *
     * @param adapter adapter
     */
    private void firstSetAdapter(BaseAdapter adapter) {
        if (mTransformerAnimAdd != null) {
            mIsAddRemoveAnim = true;
        }
        mCards = new LinkedList<>();
        // mCards4JudgeZIndex = new ArrayList<>();
        mCardCount = adapter.getCount();
        for (int i = mCardCount - 1; i >= 0; i--) {
            View child = adapter.getView(i, null, mCardView);
            CardItem cardItem = new CardItem(child, 0, i);
            mCardView.addCardView(cardItem);
            mZIndexTransformerCommon.transformAnimation(cardItem, mCurrentFraction, mCardWidth, mCardHeight, i, i);
            mTransformerCommon.transformAnimation(child, mCurrentFraction, mCardWidth, mCardHeight, i, i);
            mCards.addFirst(cardItem);
            // mCards4JudgeZIndex.add(cardItem);
            child.setVisibility(View.INVISIBLE);
            showAnimAdd(child, i * mAnimAddRemoveDelay, i, i == mCardCount - 1);
        }
    }

    private void showAnimAdd(final View view, int delay, final int position, final boolean isLast) {
        if (mTransformerAnimAdd == null) {
            return;
        }
        final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mAnimAddRemoveDuration);
        valueAnimator.setStartDelay(delay);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float fraction = (float) animation.getAnimatedValue();
                mTransformerAnimAdd.transformAnimation(view, fraction, mCardWidth, mCardHeight, position, position);
                if (mAnimAddRemoveInterpolator != null) {
                    mTransformerAnimAdd.transformInterpolatedAnimation(view, mAnimAddRemoveInterpolator.getInterpolation(fraction), mCardWidth, mCardHeight, position, position);
                }
            }
        });
        valueAnimator.addListener(new Animator.AnimatorListener() {

            @Override
            public void onAnimationStart(Animator animation) {
                view.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                if (isLast) {
                    mIsAddRemoveAnim = false;
                    if (mTempAdapter != null) {
                        notifyDataSetChanged(mTempAdapter);
                    }
                }
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        mCardView.post(new Runnable() {

            @Override
            public void run() {
                valueAnimator.start();
            }
        });
    }

    /**
     * notify
     *
     * @param adapter adapter
     */
    private void notifySetAdapter(BaseAdapter adapter) {
        mCardCount = adapter.getCount();
        for (int i = 0; i < mCardCount; i++) {
            CardItem cardItem = mCards.get(i);
            View child = adapter.getView(cardItem.adapterIndex, cardItem.view, mCardView);
            if (child != cardItem.view) {
                if (cardItem.view != null) {
                    mCardView.removeView(cardItem.view);
                }
                cardItem.view = child;
                mCardView.addCardView(cardItem, i);
                mZIndexTransformerCommon.transformAnimation(cardItem, mCurrentFraction, mCardWidth, mCardHeight, i, i);
                mTransformerCommon.transformAnimation(child, mCurrentFraction, mCardWidth, mCardHeight, i, i);
            }
        }
        for (int i = mCardCount - 1; i >= 0; i--) {
            mCards.get(i).view.bringToFront();
            mCardView.updateViewLayout(mCards.get(i).view, mCards.get(i).view.getLayoutParams());
        }
    }

    void notifyDataSetChanged(BaseAdapter adapter) {
        if (mIsAnim || mIsAddRemoveAnim) {
            mTempAdapter = adapter;
        } else {
            mTempAdapter = null;
            initAdapterView(adapter, false);
        }
    }

    void bringCardToFront(CardItem card) {
        if (mCards == null || mTransformerCommon == null || mTransformerToFront == null || mTransformerToBack == null) {
            return;
        }
        int position = mCards.indexOf(card);
        bringCardToFront(position);
    }

    /**
     * bring the specific position card to front
     *
     * @param position position
     */
    void bringCardToFront(int position) {
        if (position >= 0 && position != mPositionToFront && !mIsAnim && !mIsAddRemoveAnim) {
            mPositionToFront = position;
            // if the animation type is not ANIM_TYPE_SWITCH, the card to back post is the last
            // position
            mPositionToBack = mAnimType == InfiniteCardView.ANIM_TYPE_SWITCH ? mPositionToFront : (mCardCount - 1);
            mCardToBack = mCards.getFirst();
            mCardToFront = mCards.get(mPositionToFront);
            if (mValueAnimator.isRunning()) {
                mValueAnimator.end();
            }
            mIsAnim = true;
            mValueAnimator.start();
        }
    }

    // @Override
    // public int compare(CardItem o1, CardItem o2) {
    // return o1.zIndex < o2.zIndex ? -1 : 1;
    // }
    void setCardSize(int cardWidth, int cardHeight) {
        this.mCardWidth = cardWidth;
        this.mCardHeight = cardHeight;
    }

    void setTransformerToFront(AnimationTransformer toFrontTransformer) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mTransformerToFront = toFrontTransformer;
    }

    void setTransformerToBack(AnimationTransformer toBackTransformer) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mTransformerToBack = toBackTransformer;
    }

    void setCommonSwitchTransformer(AnimationTransformer commonTransformer) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mTransformerCommon = commonTransformer;
    }

    void setTransformerCommon(AnimationTransformer transformerCommon) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mTransformerCommon = transformerCommon;
    }

    void setZIndexTransformerToFront(ZIndexTransformer zIndexTransformerToFront) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mZIndexTransformerToFront = zIndexTransformerToFront;
    }

    void setZIndexTransformerToBack(ZIndexTransformer zIndexTransformerToBack) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mZIndexTransformerToBack = zIndexTransformerToBack;
    }

    void setZIndexTransformerCommon(ZIndexTransformer zIndexTransformerCommon) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mZIndexTransformerCommon = zIndexTransformerCommon;
    }

    void setAnimInterpolator(Interpolator animInterpolator) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mAnimInterpolator = animInterpolator;
    }

    void setAnimType(int animType) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mAnimType = animType;
    }

    void setTransformerAnimAdd(AnimationTransformer transformerAnimAdd) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mTransformerAnimAdd = transformerAnimAdd;
    }

    void setTransformerAnimRemove(AnimationTransformer transformerAnimRemove) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mTransformerAnimRemove = transformerAnimRemove;
    }

    void setAnimAddRemoveInterpolator(Interpolator animAddRemoveInterpolator) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mAnimAddRemoveInterpolator = animAddRemoveInterpolator;
    }

    void setAnimAddRemoveDelay(int animAddRemoveDelay) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mAnimAddRemoveDelay = animAddRemoveDelay;
    }

    void setAnimAddRemoveDuration(int animAddRemoveDuration) {
        if (mIsAnim || mIsAddRemoveAnim) {
            return;
        }
        this.mAnimAddRemoveDuration = animAddRemoveDuration;
    }

    boolean isAnimating() {
        return mIsAnim || mIsAddRemoveAnim;
    }

    void setCardAnimationListener(InfiniteCardView.CardAnimationListener cardAnimationListener) {
        this.mCardAnimationListener = cardAnimationListener;
    }
}

19 Source : CardAnimationHelper.java
with Apache License 2.0
from BakerJQ

void notifyDataSetChanged(BaseAdapter adapter) {
    if (mIsAnim || mIsAddRemoveAnim) {
        mTempAdapter = adapter;
    } else {
        mTempAdapter = null;
        initAdapterView(adapter, false);
    }
}

19 Source : CardAnimationHelper.java
with Apache License 2.0
from BakerJQ

/**
 * init adapter view
 *
 * @param adapter adapter
 */
void initAdapterView(BaseAdapter adapter, boolean reset) {
    if (mCardWidth > 0 && mCardHeight > 0) {
        if (mCards == null) {
            mCardView.removeAllViews();
            firstSetAdapter(adapter);
        } else if (reset || mCards.size() != adapter.getCount()) {
            resetAdapter(adapter);
        } else {
            notifySetAdapter(adapter);
        }
    }
}

19 Source : MainActivity.java
with Apache License 2.0
from BakerJQ

public clreplaced MainActivity extends AppCompatActivity {

    private InfiniteCardView mCardView;

    private BaseAdapter mAdapter1, mAdapter2;

    private int[] resId = { R.mipmap.pic1, R.mipmap.pic2, R.mipmap.pic3, R.mipmap.pic4, R.mipmap.pic5 };

    private boolean mIsAdapter1 = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCardView = findViewById(R.id.view);
        mAdapter1 = new MyAdapter(resId);
        mAdapter2 = new MyAdapter(resId);
        mCardView.setAdapter(mAdapter1);
        mCardView.setCardAnimationListener(new InfiniteCardView.CardAnimationListener() {

            @Override
            public void onAnimationStart() {
                Toast.makeText(MainActivity.this, "Animation Start", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAnimationEnd() {
                Toast.makeText(MainActivity.this, "Animation End", Toast.LENGTH_SHORT).show();
            }
        });
        initButton();
    }

    private void initButton() {
        findViewById(R.id.pre).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mIsAdapter1) {
                    setStyle2();
                    mCardView.bringCardToFront(mAdapter1.getCount() - 1);
                } else {
                    setStyle1();
                    mCardView.bringCardToFront(mAdapter2.getCount() - 1);
                }
            }
        });
        findViewById(R.id.next).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mIsAdapter1) {
                    setStyle2();
                } else {
                    setStyle3();
                }
                mCardView.bringCardToFront(1);
            }
        });
        findViewById(R.id.change).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mCardView.isAnimating()) {
                    return;
                }
                mIsAdapter1 = !mIsAdapter1;
                if (mIsAdapter1) {
                    setStyle2();
                    mCardView.setAdapter(mAdapter1);
                } else {
                    setStyle1();
                    mCardView.setAdapter(mAdapter2);
                }
            }
        });
    }

    private void setStyle1() {
        mCardView.setClickable(true);
        mCardView.setAnimType(InfiniteCardView.ANIM_TYPE_FRONT);
        mCardView.setAnimInterpolator(new LinearInterpolator());
        mCardView.setTransformerToFront(new DefaultTransformerToFront());
        mCardView.setTransformerToBack(new DefaultTransformerToBack());
        mCardView.setZIndexTransformerToBack(new DefaultZIndexTransformerCommon());
    }

    private void setStyle2() {
        mCardView.setClickable(true);
        mCardView.setAnimType(InfiniteCardView.ANIM_TYPE_SWITCH);
        mCardView.setAnimInterpolator(new OvershootInterpolator(-18));
        mCardView.setTransformerToFront(new DefaultTransformerToFront());
        mCardView.setTransformerToBack(new AnimationTransformer() {

            @Override
            public void transformAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
                int positionCount = fromPosition - toPosition;
                float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
                view.setScaleX(scale);
                view.setScaleY(scale);
                if (fraction < 0.5) {
                    view.setRotationX(180 * fraction);
                } else {
                    view.setRotationX(180 * (1 - fraction));
                }
            }

            @Override
            public void transformInterpolatedAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
                int positionCount = fromPosition - toPosition;
                float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
                view.setTranslationY(-cardHeight * (0.8f - scale) * 0.5f - cardWidth * (0.02f * fromPosition - 0.02f * fraction * positionCount));
            }
        });
        mCardView.setZIndexTransformerToBack(new ZIndexTransformer() {

            @Override
            public void transformAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
                if (fraction < 0.4f) {
                    card.zIndex = 1f + 0.01f * fromPosition;
                } else {
                    card.zIndex = 1f + 0.01f * toPosition;
                }
            }

            @Override
            public void transformInterpolatedAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
            }
        });
    }

    private void setStyle3() {
        mCardView.setClickable(false);
        mCardView.setAnimType(InfiniteCardView.ANIM_TYPE_FRONT_TO_LAST);
        mCardView.setAnimInterpolator(new OvershootInterpolator(-8));
        mCardView.setTransformerToFront(new DefaultCommonTransformer());
        mCardView.setTransformerToBack(new AnimationTransformer() {

            @Override
            public void transformAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
                int positionCount = fromPosition - toPosition;
                float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
                view.setScaleX(scale);
                view.setScaleY(scale);
                if (fraction < 0.5) {
                    view.setTranslationX(cardWidth * fraction * 1.5f);
                    view.setRotationY(-45 * fraction);
                } else {
                    view.setTranslationX(cardWidth * 1.5f * (1f - fraction));
                    view.setRotationY(-45 * (1 - fraction));
                }
            }

            @Override
            public void transformInterpolatedAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
                int positionCount = fromPosition - toPosition;
                float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
                view.setTranslationY(-cardHeight * (0.8f - scale) * 0.5f - cardWidth * (0.02f * fromPosition - 0.02f * fraction * positionCount));
            }
        });
        mCardView.setZIndexTransformerToBack(new ZIndexTransformer() {

            @Override
            public void transformAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
                if (fraction < 0.5f) {
                    card.zIndex = 1f + 0.01f * fromPosition;
                } else {
                    card.zIndex = 1f + 0.01f * toPosition;
                }
            }

            @Override
            public void transformInterpolatedAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
            }
        });
    }

    private static clreplaced MyAdapter extends BaseAdapter {

        private int[] resIds = {};

        MyAdapter(int[] resIds) {
            this.resIds = resIds;
        }

        @Override
        public int getCount() {
            return resIds.length;
        }

        @Override
        public Integer gereplacedem(int position) {
            return resIds[position];
        }

        @Override
        public long gereplacedemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false);
            }
            convertView.setBackgroundResource(resIds[position]);
            return convertView;
        }
    }
}

19 Source : MultipleSelectionManager.java
with Apache License 2.0
from archos-sa

/**
 * Created by alexandre on 21/10/15.
 */
public clreplaced MultipleSelectionManager implements ActionMode.Callback {

    private final Browser mBrowser;

    private final BaseAdapter mBrowserAdapter;

    private final AbsListView mArchosGridView;

    private final SharedPreferences mPreferences;

    private ActionMode mActionBar;

    public MultipleSelectionManager(Browser browser, AbsListView listView, BaseAdapter browserAdapter) {
        mBrowser = browser;
        mArchosGridView = listView;
        mBrowserAdapter = browserAdapter;
        mPreferences = PreferenceManager.getDefaultSharedPreferences(mBrowser.getActivity());
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        menu.add(0, R.string.delete, 0, R.string.delete).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add(0, R.string.copy_on_device_multi, 0, R.string.copy_on_device_multi).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        menu.add(0, R.string.menu_subloader_allfolder, Menu.NONE, R.string.menu_subloader_allfolder).setIcon(R.drawable.ic_menu_subreplacedles).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(0, R.string.video_browser_unindex_file, 0, R.string.video_browser_unindex_file).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(0, R.string.video_browser_index_file, 0, R.string.video_browser_index_file).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(0, R.string.mark_as_watched, 0, R.string.mark_as_watched).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(0, R.string.mark_as_not_watched, 0, R.string.mark_as_not_watched).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        onPrepareActionMode(mode, menu);
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        menu.findItem(R.string.delete).setVisible(mArchosGridView.getCheckedItemCount() > 0);
        boolean areNotLocal = true;
        boolean areFiles = true;
        boolean areAllIndexed = true;
        // = (isShowOrSeason || isMovieOrEpisode) && Trakt.isTraktV2Enabled(mContext, mPreferences);
        boolean markAsTrakt = Trakt.isTraktV2Enabled(mBrowser.getActivity(), mPreferences);
        boolean markAsWatched = false;
        boolean markAsUnWatched = false;
        int firstPosition = 0;
        if (mArchosGridView instanceof HeaderGridView) {
            firstPosition += ((HeaderGridView) mArchosGridView).getOffset();
        } else if (mArchosGridView instanceof ListView) {
            firstPosition += ((ListView) mArchosGridView).getHeaderViewsCount();
        }
        if (mArchosGridView.getCheckedItemCount() > 0) {
            for (int i = firstPosition; i < mArchosGridView.getCount(); i++) {
                if (mArchosGridView.getCheckedItemPositions().get(i)) {
                    Object obj = mBrowserAdapter.gereplacedem(i - firstPosition);
                    final boolean isShowOrSeason = obj instanceof Season || obj instanceof Tvshow;
                    final boolean isMovieOrEpisode = obj instanceof Movie || obj instanceof Episode;
                    Uri uri = null;
                    if (obj instanceof Video) {
                        uri = ((Video) obj).getFileUri();
                    } else if (obj instanceof MetaFile2) {
                        uri = ((MetaFile2) obj).getUri();
                    }
                    if (com.archos.filecorelibrary.Utils.isLocal(uri)) {
                        areNotLocal = false;
                    }
                    if (obj instanceof MetaFile2 || obj instanceof NonIndexedVideo) {
                        areAllIndexed = false;
                        if (obj instanceof MetaFile2 && ((MetaFile2) obj).isDirectory()) {
                            areFiles = false;
                        }
                    }
                    if (obj instanceof Video) {
                        Video video = (Video) obj;
                        if (markAsTrakt && (isShowOrSeason || isMovieOrEpisode)) {
                            if (!video.isWatched())
                                markAsWatched = true;
                            else
                                markAsUnWatched = true;
                        } else if (areFiles) {
                            if (video.getResumeMs() != PlayerActivity.LAST_POSITION_END) {
                                markAsWatched = true;
                            } else {
                                markAsUnWatched = true;
                            }
                        } else {
                            markAsWatched = false;
                            markAsUnWatched = false;
                        }
                    }
                    if (!areFiles && !areNotLocal)
                        break;
                }
            }
        } else {
            areNotLocal = false;
            areFiles = false;
        }
        menu.findItem(R.string.video_browser_unindex_file).setVisible(areAllIndexed && mArchosGridView.getCheckedItemCount() > 0);
        menu.findItem(R.string.video_browser_index_file).setVisible(!areAllIndexed && areFiles && areNotLocal);
        menu.findItem(R.string.copy_on_device_multi).setVisible(areNotLocal);
        menu.findItem(R.string.menu_subloader_allfolder).setVisible(areFiles);
        menu.findItem(R.string.mark_as_not_watched).setVisible(markAsUnWatched);
        menu.findItem(R.string.mark_as_watched).setVisible(markAsWatched);
        return true;
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        int firstPosition = 0;
        if (mArchosGridView instanceof HeaderGridView) {
            firstPosition += ((HeaderGridView) mArchosGridView).getOffset();
        } else if (mArchosGridView instanceof ListView) {
            firstPosition += ((ListView) mArchosGridView).getHeaderViewsCount();
        }
        switch(item.gereplacedemId()) {
            case R.string.delete:
                List<Uri> toDelete = new ArrayList<>();
                for (int i = 0; i < mArchosGridView.getCount(); i++) {
                    if (mArchosGridView.getCheckedItemPositions().get(i)) {
                        toDelete.add(mBrowser.getRealPathUriFromPosition(i - firstPosition));
                    }
                }
                mBrowser.showConfirmDeleteDialog(false, toDelete);
                return true;
            case R.string.copy_on_device_multi:
                List<Uri> toCopy = new ArrayList<>();
                for (int i = 0; i < mArchosGridView.getCount(); i++) {
                    if (mArchosGridView.getCheckedItemPositions().get(i)) {
                        toCopy.add(mBrowser.getRealPathUriFromPosition(i - firstPosition));
                    }
                }
                mBrowser.startDownloadingVideo(toCopy);
                return true;
            case R.string.menu_subloader_allfolder:
                ArrayList<String> videoPaths = new ArrayList<String>();
                for (int i = 0; i < mArchosGridView.getCount(); i++) {
                    if (mArchosGridView.getCheckedItemPositions().get(i)) {
                        videoPaths.add(mBrowser.getRealPathUriFromPosition(i - firstPosition).toString());
                    }
                }
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.setClreplaced(mBrowser.getContext(), SubreplacedlesDownloaderActivity.clreplaced);
                intent.putExtra(SubreplacedlesDownloaderActivity.FILE_URLS, videoPaths);
                mBrowser.startActivity(intent);
                mActionBar.finish();
                return true;
            case R.string.video_browser_unindex_file:
                ArrayList<Long> toUnindex = new ArrayList<>();
                for (int i = 0; i < mArchosGridView.getCount(); i++) {
                    if (mArchosGridView.getCheckedItemPositions().get(i)) {
                        Object obj = mBrowserAdapter.gereplacedem(i - firstPosition);
                        if (obj instanceof Video) {
                            toUnindex.add(((Video) obj).getId());
                        }
                    }
                }
                DbUtils.markHiddenValue(mBrowser.getActivity(), toUnindex.toArray(new Long[1]), 1);
                mActionBar.finish();
                return true;
            case R.string.video_browser_index_file:
                for (int i = 0; i < mArchosGridView.getCount(); i++) {
                    if (mArchosGridView.getCheckedItemPositions().get(i))
                        VideoStore.requestIndexing(mBrowser.getRealPathUriFromPosition(i - firstPosition), mBrowser.getActivity());
                }
                return true;
            case R.string.mark_as_watched:
                for (int i = 0; i < mArchosGridView.getCount(); i++) {
                    if (mArchosGridView.getCheckedItemPositions().get(i)) {
                        Object obj = mBrowserAdapter.gereplacedem(i - firstPosition);
                        if (obj instanceof Video) {
                            final boolean isShowOrSeason = obj instanceof Season || obj instanceof Tvshow;
                            final boolean isMovieOrEpisode = obj instanceof Movie || obj instanceof Episode;
                            if ((isShowOrSeason || isMovieOrEpisode) && !((Video) obj).isWatched() || ((Video) obj).getResumeMs() != PlayerActivity.LAST_POSITION_END) {
                                mBrowser.markAsRead(i - firstPosition, true, mPreferences.getBoolean(BrowserByNetwork.KEY_NETWORK_BOOKMARKS, true));
                            }
                        }
                    }
                }
                return true;
            case R.string.mark_as_not_watched:
                for (int i = 0; i < mArchosGridView.getCount(); i++) {
                    if (mArchosGridView.getCheckedItemPositions().get(i)) {
                        Object obj = mBrowserAdapter.gereplacedem(i - firstPosition);
                        Uri uri = null;
                        if (obj instanceof Video) {
                            final boolean isShowOrSeason = obj instanceof Season || obj instanceof Tvshow;
                            final boolean isMovieOrEpisode = obj instanceof Movie || obj instanceof Episode;
                            if ((isShowOrSeason || isMovieOrEpisode) && ((Video) obj).isWatched() || ((Video) obj).getResumeMs() == PlayerActivity.LAST_POSITION_END) {
                                mBrowser.markAsNotRead(i - firstPosition, true, mPreferences.getBoolean(BrowserByNetwork.KEY_NETWORK_BOOKMARKS, true));
                            }
                        }
                    }
                }
                return true;
        }
        return false;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        mBrowser.disableMultiple();
        mActionBar = null;
    }

    public void destroyActionBar() {
        if (mActionBar != null)
            mActionBar.finish();
    }

    public void setActionBar(ActionMode actionBar) {
        mActionBar = actionBar;
    }

    public void invalidateActionBar() {
        mActionBar.invalidate();
    }
}

19 Source : ListPopupWindowTest.java
with Apache License 2.0
from androidx

// Broken on API 30 b/159743495
@SdkSuppress(maxSdkVersion = 29)
@RunWith(AndroidJUnit4.clreplaced)
public clreplaced ListPopupWindowTest {

    @Rule
    public final ActivityTestRule<PopupTestActivity> mActivityTestRule = new ActivityTestRule<>(PopupTestActivity.clreplaced);

    private FrameLayout mContainer;

    private Button mButton;

    private ListPopupWindow mListPopupWindow;

    private BaseAdapter mListPopupAdapter;

    private AdapterView.OnItemClickListener mItemClickListener;

    /**
     * Item click listener that dismisses our <code>ListPopupWindow</code> when any item
     * is clicked. Note that this needs to be a separate clreplaced that is also protected (not
     * private) so that Mockito can "spy" on it.
     */
    protected clreplaced PopupItemClickListener implements AdapterView.OnItemClickListener {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            mListPopupWindow.dismiss();
        }
    }

    @Before
    public void setUp() throws Exception {
        final PopupTestActivity activity = mActivityTestRule.getActivity();
        mContainer = activity.findViewById(R.id.container);
        mButton = mContainer.findViewById(R.id.test_button);
        mItemClickListener = new PopupItemClickListener();
    }

    @Test
    @MediumTest
    public void testBasicContent() {
        Builder popupBuilder = new Builder();
        popupBuilder.wireToActionButton();
        onView(withId(R.id.test_button)).perform(click());
        replacedertNotNull("Popup window created", mListPopupWindow);
        replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
        final View mainDecorView = mActivityTestRule.getActivity().getWindow().getDecorView();
        onView(withText("Alice")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
        onView(withText("Bob")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
        onView(withText("Charlie")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
        onView(withText("Deirdre")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
        onView(withText("El")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
    }

    @FlakyTest(bugId = 33669575)
    @Test
    @LargeTest
    public void testAnchoring() {
        Builder popupBuilder = new Builder();
        popupBuilder.wireToActionButton();
        onView(withId(R.id.test_button)).perform(click());
        replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
        replacedertEquals("Popup window anchor", mButton, mListPopupWindow.getAnchorView());
        final int[] anchorOnScreenXY = new int[2];
        final int[] popupOnScreenXY = new int[2];
        final int[] popupInWindowXY = new int[2];
        final Rect rect = new Rect();
        mListPopupWindow.getListView().getLocationOnScreen(popupOnScreenXY);
        mButton.getLocationOnScreen(anchorOnScreenXY);
        mListPopupWindow.getListView().getLocationInWindow(popupInWindowXY);
        mListPopupWindow.getBackground().getPadding(rect);
        replacedertEquals("Anchoring X", anchorOnScreenXY[0] + popupInWindowXY[0], popupOnScreenXY[0]);
        replacedertEquals("Anchoring Y", anchorOnScreenXY[1] + popupInWindowXY[1] + mButton.getHeight(), popupOnScreenXY[1] + rect.top);
    }

    @Test
    @MediumTest
    public void testDismissalViaAPI() throws Throwable {
        Builder popupBuilder = new Builder().withDismissListener();
        popupBuilder.wireToActionButton();
        onView(withId(R.id.test_button)).perform(click());
        replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
        mActivityTestRule.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                mListPopupWindow.dismiss();
            }
        });
        // Verify that our dismiss listener has been called
        verify(popupBuilder.mOnDismissListener, times(1)).onDismiss();
        replacedertFalse("Popup window not showing after dismissal", mListPopupWindow.isShowing());
    }

    private void testDismissalViaTouch(boolean setupAsModal) throws Throwable {
        Builder popupBuilder = new Builder().setModal(setupAsModal).withDismissListener();
        popupBuilder.wireToActionButton();
        final View.OnClickListener mockContainerClickListener = mock(View.OnClickListener.clreplaced);
        // Also register a click listener on the top-level container
        mActivityTestRule.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                mContainer.setOnClickListener(mockContainerClickListener);
            }
        });
        onView(withId(R.id.test_button)).perform(click());
        replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
        // Make sure that the modality of the popup window is set up correctly
        replacedertEquals("Popup window modality", setupAsModal, mListPopupWindow.isModal());
        // Determine the location of the popup on the screen so that we can emulate
        // a tap outside of its bounds to dismiss it
        final int[] popupOnScreenXY = new int[2];
        final Rect rect = new Rect();
        mListPopupWindow.getListView().getLocationOnScreen(popupOnScreenXY);
        mListPopupWindow.getBackground().getPadding(rect);
        int emulatedTapX = popupOnScreenXY[0] - rect.left - 20;
        int emulatedTapY = popupOnScreenXY[1] - 20;
        // The logic below uses Instrumentation to emulate a tap outside the bounds of the
        // displayed list popup window. This tap is then treated by the framework to be "split" as
        // the ACTION_OUTSIDE for the popup itself, as well as DOWN / MOVE / UP for the underlying
        // view root if the popup is not modal.
        // It is not correct to emulate these two sequences separately in the test, as it
        // wouldn't emulate the user-facing interaction for this test. Note that usage
        // of Instrumentation is necessary here since Espresso's actions operate at the level
        // of view or data. Also, we don't want to use View.dispatchTouchEvent directly as
        // that would require emulation of two separate sequences as well.
        Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
        // Inject DOWN event
        long downTime = SystemClock.uptimeMillis();
        MotionEvent eventDown = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, emulatedTapX, emulatedTapY, 1);
        instrumentation.sendPointerSync(eventDown);
        // Inject MOVE event
        long moveTime = SystemClock.uptimeMillis();
        MotionEvent eventMove = MotionEvent.obtain(moveTime, moveTime, MotionEvent.ACTION_MOVE, emulatedTapX, emulatedTapY, 1);
        instrumentation.sendPointerSync(eventMove);
        // Inject UP event
        long upTime = SystemClock.uptimeMillis();
        MotionEvent eventUp = MotionEvent.obtain(upTime, upTime, MotionEvent.ACTION_UP, emulatedTapX, emulatedTapY, 1);
        instrumentation.sendPointerSync(eventUp);
        // Wait for the system to process all events in the queue
        instrumentation.waitForIdleSync();
        // At this point our popup should not be showing and should have notified its
        // dismiss listener
        verify(popupBuilder.mOnDismissListener, times(1)).onDismiss();
        replacedertFalse("Popup window not showing after outside click", mListPopupWindow.isShowing());
        // Also test that the click outside the popup bounds has been "delivered" to the main
        // container only if the popup is not modal
        verify(mockContainerClickListener, times(setupAsModal ? 0 : 1)).onClick(mContainer);
    }

    @Test
    @MediumTest
    public void testDismissalOutsideNonModal() throws Throwable {
        testDismissalViaTouch(false);
    }

    @Test
    @MediumTest
    public void testDismissalOutsideModal() throws Throwable {
        testDismissalViaTouch(true);
    }

    @Test
    @LargeTest
    public void tesreplacedemClickViaEvent() {
        Builder popupBuilder = new Builder().withItemClickListener();
        popupBuilder.wireToActionButton();
        onView(withId(R.id.test_button)).perform(click());
        replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
        // Verify that our menu item click listener hasn't been called yet
        verify(popupBuilder.mOnItemClickListener, never()).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), any(int.clreplaced), anyLong());
        final View mainDecorView = mActivityTestRule.getActivity().getWindow().getDecorView();
        onView(withText("Charlie")).inRoot(withDecorView(not(is(mainDecorView)))).perform(click());
        // Verify that out menu item click listener has been called with the expected item
        // position. Note that we use any() for other parameters, as we don't want to tie ourselves
        // to the specific implementation details of how ListPopupWindow displays its content.
        verify(popupBuilder.mOnItemClickListener, times(1)).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), eq(2), anyLong());
        // Our item click listener also dismisses the popup
        replacedertFalse("Popup window not showing after click", mListPopupWindow.isShowing());
    }

    @Test
    @SmallTest
    public void testAccessEpicenter() {
        new Builder().configure();
        final Rect initialRect = new Rect(10, 10, 20, 20);
        replacedertNull(mListPopupWindow.getEpicenterBounds());
        mListPopupWindow.setEpicenterBounds(initialRect);
        replacedertEquals(initialRect, mListPopupWindow.getEpicenterBounds());
        mListPopupWindow.setEpicenterBounds(null);
        replacedertNull(mListPopupWindow.getEpicenterBounds());
    }

    @Test
    @SmallTest
    public void testEpicenterSetterImmutability() {
        new Builder().configure();
        final Rect initialRect = new Rect(10, 10, 20, 20);
        mListPopupWindow.setEpicenterBounds(initialRect);
        replacedertEquals(initialRect, mListPopupWindow.getEpicenterBounds());
        initialRect.offset(5, 5);
        replacedertNotEquals(initialRect, mListPopupWindow.getEpicenterBounds());
    }

    @Test
    @SmallTest
    public void testEpicenterGetterImmutability() {
        new Builder().configure();
        final Rect initialRect = new Rect(10, 10, 20, 20);
        mListPopupWindow.setEpicenterBounds(initialRect);
        final Rect retrievedRect = mListPopupWindow.getEpicenterBounds();
        replacedertEquals(initialRect, retrievedRect);
        retrievedRect.offset(5, 5);
        replacedertNotEquals(initialRect, retrievedRect);
    }

    @Test
    @MediumTest
    public void tesreplacedemClickViaAPI() throws Throwable {
        Builder popupBuilder = new Builder().withItemClickListener();
        popupBuilder.wireToActionButton();
        onView(withId(R.id.test_button)).perform(click());
        replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
        // Verify that our menu item click listener hasn't been called yet
        verify(popupBuilder.mOnItemClickListener, never()).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), any(int.clreplaced), anyLong());
        mActivityTestRule.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                mListPopupWindow.performItemClick(1);
            }
        });
        // Verify that out menu item click listener has been called with the expected item
        // position. Note that we use any() for other parameters, as we don't want to tie ourselves
        // to the specific implementation details of how ListPopupWindow displays its content.
        verify(popupBuilder.mOnItemClickListener, times(1)).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), eq(1), anyLong());
        // Our item click listener also dismisses the popup
        replacedertFalse("Popup window not showing after click", mListPopupWindow.isShowing());
    }

    /**
     * Emulates a drag-down gestures by injecting ACTION events with {@link Instrumentation}.
     */
    private void emulateDragDownGesture(int emulatedX, int emulatedStartY, int swipeAmount) {
        // The logic below uses Instrumentation to emulate a swipe / drag gesture to bring up
        // the popup content. Note that we don't want to use Espresso's GeneralSwipeAction
        // as that operates on the level of an individual view. Here we want to test correct
        // forwarding of events that cross the boundary between the anchor and the popup menu.
        final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
        // Inject DOWN event
        long downTime = SystemClock.uptimeMillis();
        MotionEvent eventDown = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, emulatedX, emulatedStartY, 1);
        instrumentation.sendPointerSync(eventDown);
        // Inject a sequence of MOVE events that emulate a "swipe down" gesture
        for (int i = 0; i < 10; i++) {
            long moveTime = SystemClock.uptimeMillis();
            final int moveY = emulatedStartY + swipeAmount * i / 10;
            MotionEvent eventMove = MotionEvent.obtain(moveTime, moveTime, MotionEvent.ACTION_MOVE, emulatedX, moveY, 1);
            instrumentation.sendPointerSync(eventMove);
            // sleep for a bit to emulate a 200ms swipe
            SystemClock.sleep(20);
        }
        // Inject UP event
        long upTime = SystemClock.uptimeMillis();
        MotionEvent eventUp = MotionEvent.obtain(upTime, upTime, MotionEvent.ACTION_UP, emulatedX, emulatedStartY + swipeAmount, 1);
        instrumentation.sendPointerSync(eventUp);
        // Wait for the system to process all events in the queue
        instrumentation.waitForIdleSync();
    }

    @Test
    @MediumTest
    public void testCreateOnDragListener() throws Throwable {
        // In this test we want precise control over the height of the popup content since
        // we need to know by how much to swipe down to end the emulated gesture over the
        // specific item in the popup. This is why we're using a popup style that removes
        // all decoration around the popup content, as well as our own row layout with known
        // height.
        Builder popupBuilder = new Builder().withPopupStyleAttr(R.style.PopupEmptyStyle).withContentRowLayoutId(R.layout.popup_window_item).withItemClickListener().withDismissListener();
        // Configure ListPopupWindow without showing it
        popupBuilder.configure();
        // Get the anchor view and configure it with ListPopupWindow's drag-to-open listener
        final View anchor = mActivityTestRule.getActivity().findViewById(R.id.test_button);
        View.OnTouchListener dragListener = mListPopupWindow.createDragToOpenListener(anchor);
        anchor.setOnTouchListener(dragListener);
        // And also configure it to show the popup window on click
        anchor.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mListPopupWindow.show();
            }
        });
        // Get the height of a row item in our popup window
        final int popupRowHeight = mActivityTestRule.getActivity().getResources().getDimensionPixelSize(R.dimen.popup_row_height);
        final int[] anchorOnScreenXY = new int[2];
        anchor.getLocationOnScreen(anchorOnScreenXY);
        // Compute the start coordinates of a downward swipe and the amount of swipe. We'll
        // be swiping by twice the row height. That, combined with the swipe originating in the
        // center of the anchor should result in clicking the second row in the popup.
        int emulatedX = anchorOnScreenXY[0] + anchor.getWidth() / 2;
        int emulatedStartY = anchorOnScreenXY[1] + anchor.getHeight() / 2;
        int swipeAmount = 2 * popupRowHeight;
        // Emulate drag-down gesture with a sequence of motion events
        emulateDragDownGesture(emulatedX, emulatedStartY, swipeAmount);
        // We expect the swipe / drag gesture to result in clicking the second item in our list.
        verify(popupBuilder.mOnItemClickListener, times(1)).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), eq(1), eq(1L));
        // Since our item click listener calls dismiss() on the popup, we expect the popup to not
        // be showing
        replacedertFalse(mListPopupWindow.isShowing());
        // At this point our popup should have notified its dismiss listener
        verify(popupBuilder.mOnDismissListener, times(1)).onDismiss();
    }

    /**
     * Inner helper clreplaced to configure an instance of <code>ListPopupWindow</code> for the
     * specific test. The main reason for its existence is that once a popup window is shown
     * with the show() method, most of its configuration APIs are no-ops. This means that
     * we can't add logic that is specific to a certain test (such as dismissing a non-modal
     * popup window) once it's shown and we have a reference to a displayed ListPopupWindow.
     */
    public clreplaced Builder {

        private boolean mIsModal;

        private boolean mHasDismissListener;

        private boolean mHasItemClickListener;

        private AdapterView.OnItemClickListener mOnItemClickListener;

        private PopupWindow.OnDismissListener mOnDismissListener;

        private int mContentRowLayoutId = R.layout.abc_popup_menu_item_layout;

        private boolean mUseCustomPopupStyle;

        private int mPopupStyleAttr;

        public Builder setModal(boolean isModal) {
            mIsModal = isModal;
            return this;
        }

        public Builder withContentRowLayoutId(int contentRowLayoutId) {
            mContentRowLayoutId = contentRowLayoutId;
            return this;
        }

        public Builder withPopupStyleAttr(int popupStyleAttr) {
            mUseCustomPopupStyle = true;
            mPopupStyleAttr = popupStyleAttr;
            return this;
        }

        public Builder withItemClickListener() {
            mHasItemClickListener = true;
            return this;
        }

        public Builder withDismissListener() {
            mHasDismissListener = true;
            return this;
        }

        private void configure() {
            final Context context = mContainer.getContext();
            if (mUseCustomPopupStyle) {
                mListPopupWindow = new ListPopupWindow(context, null, mPopupStyleAttr, 0);
            } else {
                mListPopupWindow = new ListPopupWindow(context);
            }
            final String[] POPUP_CONTENT = new String[] { "Alice", "Bob", "Charlie", "Deirdre", "El" };
            mListPopupAdapter = new BaseAdapter() {

                clreplaced ViewHolder {

                    private TextView replacedle;
                }

                @Override
                public int getCount() {
                    return POPUP_CONTENT.length;
                }

                @Override
                public Object gereplacedem(int position) {
                    return POPUP_CONTENT[position];
                }

                @Override
                public long gereplacedemId(int position) {
                    return position;
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    if (convertView == null) {
                        convertView = LayoutInflater.from(parent.getContext()).inflate(mContentRowLayoutId, parent, false);
                        ViewHolder viewHolder = new ViewHolder();
                        viewHolder.replacedle = (TextView) convertView.findViewById(R.id.replacedle);
                        convertView.setTag(viewHolder);
                    }
                    ViewHolder viewHolder = (ViewHolder) convertView.getTag();
                    viewHolder.replacedle.setText(POPUP_CONTENT[position]);
                    return convertView;
                }
            };
            mListPopupWindow.setAdapter(mListPopupAdapter);
            mListPopupWindow.setAnchorView(mButton);
            // The following mock listeners have to be set before the call to show() as
            // they are set on the internally constructed drop down.
            if (mHasItemClickListener) {
                // Wrap our item click listener with a Mockito spy
                mOnItemClickListener = spy(mItemClickListener);
                // Register that spy as the item click listener on the ListPopupWindow
                mListPopupWindow.setOnItemClickListener(mOnItemClickListener);
                // And configure Mockito to call our original listener with onItemClick.
                // This way we can have both our item click listener running to dismiss the popup
                // window, and track the invocations of onItemClick with Mockito APIs.
                doCallRealMethod().when(mOnItemClickListener).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), any(int.clreplaced), any(int.clreplaced));
            }
            if (mHasDismissListener) {
                mOnDismissListener = mock(PopupWindow.OnDismissListener.clreplaced);
                mListPopupWindow.setOnDismissListener(mOnDismissListener);
            }
            mListPopupWindow.setModal(mIsModal);
        }

        private void show() {
            configure();
            mListPopupWindow.show();
        }

        public void wireToActionButton() {
            mButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    show();
                }
            });
        }
    }
}

19 Source : BaseCacheAdapter.java
with Apache License 2.0
from akhasoft

/**
 *  The {@link android.widget.Adapter Adapter} which was designed for {@yakhont.link CacheLoader}.
 *  Intended to use with {@yakhont.link BaseResponseLoaderWrapper}.
 *
 * @param <T>
 *        The type of {@code BaseResponse} values
 *
 * @param <R>
 *        The type of network response
 *
 * @param <E>
 *        The type of error (if any)
 *
 * @param <D>
 *        The type of data in this adapter
 *
 * @yakhont.see CacheLoader
 *
 * @author akha
 */
public clreplaced BaseCacheAdapter<T, R, E, D> implements ListAdapter, SpinnerAdapter, Filterable {

    /*
                             For Madmen Only
                               - Hermann Hesse, Steppenwolf
                                                                                                  */
    private BaseAdapter mBaseAdapter;

    private final BaseArrayAdapter<T> mArrayAdapter;

    private final BaseCursorAdapter mCursorAdapter;

    private final ArrayConverter<T, R, E, D> mConverter;

    /**
     * The API to convert a {@code BaseResponse} to collection.
     *
     * @param <T>
     *        The type of {@code BaseResponse} values
     *
     * @param <R>
     *        The type of network response
     *
     * @param <E>
     *        The type of error (if any)
     *
     * @param <D>
     *        The type of data
     */
    @SuppressWarnings("WeakerAccess")
    public interface ArrayConverter<T, R, E, D> {

        /**
         * Converts data in {@code BaseResponse} to collection.
         *
         * @param baseResponse
         *        The {@code BaseResponse}
         *
         * @return  The Collection
         */
        Collection<? extends T> convert(BaseResponse<R, E, D> baseResponse);
    }

    /**
     * For internal use only.
     *
     * <p>As Martin Fowler pointed out, {@link <a href="http://martinfowler.com/ieeeSoftware/published.pdf">"Yet there’s something
     * to be said for the public–published distinction being more important than the more common public–private distinction."</a>}
     *
     * @yakhont.see BaseSimpleCursorAdapter
     */
    public interface BaseCursorAdapter extends ListAdapter, SpinnerAdapter, Filterable {

        @SuppressWarnings("UnusedReturnValue")
        Cursor swapCursor(Cursor cursor);

        void setAdapterViewBinder(ViewBinder viewBinder);
    }

    /**
     * The API to work with adapters (for example, {@link ValuesCacheAdapterWrapper}).
     *
     * @param <R>
     *        The type of network response
     *
     * @param <E>
     *        The type of error (if any)
     *
     * @param <D>
     *        The type of data
     */
    public interface CacheAdapter<R, E, D> {

        /**
         * Updates the adapter with a new data.
         *
         * @param data
         *        The new data
         *
         * @param isMerge
         *        {@code true} if new data should be merged with existing ones, {@code false} otherwise
         */
        void update(BaseResponse<R, E, D> data, boolean isMerge);

        /**
         * Resets the array adapter.
         */
        void resetArray();

        /**
         * Returns the cursor adapter component.
         *
         * @return  The BaseCursorAdapter
         */
        BaseCursorAdapter getCursorAdapter();
    }

    /**
     * The API related to data merging.
     */
    public interface Mergeable {

        /**
         * Returns the "merge" flag.
         *
         * @return  {@code true} to merge the newly loaded data with already existing, {@code false} otherwise
         */
        boolean isMerge();
    }

    /**
     * This clreplaced can be used by external clients of {@code BaseCacheAdapter} to bind values to views.
     */
    @SuppressWarnings("unused")
    public interface ViewBinder {

        /**
         * To use as a {@link #setViewValue} return type (the value is {@value}).
         */
        boolean VIEW_BOUND = true;

        /**
         * Binds the value to the specified view.
         * When binding is handled by this {@code ViewBinder}, this method must return {@link #VIEW_BOUND};
         * otherwise, {@code BaseCacheAdapter} will attempts to handle the binding on its own.
         *
         * @param view
         *        The view to bind the data to
         *
         * @param data
         *        The data to bind to the view
         *
         * @param textRepresentation
         *        The String representation of the supplied data: it is either the result of data.toString() or an empty String but it is never null
         *
         * @return  {@code true} if the value was bound to the view, {@code false} otherwise
         */
        boolean setViewValue(View view, Object data, String textRepresentation);
    }

    /**
     * Initialises a newly created {@code BaseCacheAdapter} object.
     *
     * @param context
     *        The Activity
     *
     * @param layoutId
     *        The resource identifier of a layout file that defines the views
     *
     * @param from
     *        The list of names representing the data to bind to the UI
     *
     * @param to
     *        The views that should display data in the "from" parameter
     *
     * @param arrayAdapter
     *        The BaseArrayAdapter
     *
     * @param converter
     *        The ArrayConverter
     */
    @SuppressWarnings("WeakerAccess")
    public BaseCacheAdapter(@NonNull final Activity context, @LayoutRes final int layoutId, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter) {
        this(SupportHelper.getBaseCursorAdapter(context, layoutId, from, to), arrayAdapter, converter);
    }

    /**
     * Initialises a newly created {@code BaseCacheAdapter} object.
     *
     * @param baseCacheAdapter
     *        The BaseCacheAdapter
     */
    @SuppressWarnings({ "unused", "WeakerAccess" })
    public BaseCacheAdapter(@NonNull final BaseCacheAdapter<T, R, E, D> baseCacheAdapter) {
        this(baseCacheAdapter.mCursorAdapter, baseCacheAdapter.mArrayAdapter, baseCacheAdapter.mConverter);
    }

    /**
     * Initialises a newly created {@code BaseCacheAdapter} object.
     *
     * @param cursorAdapter
     *        The BaseCursorAdapter
     *
     * @param arrayAdapter
     *        The BaseArrayAdapter
     *
     * @param converter
     *        The ArrayConverter
     */
    @SuppressWarnings("WeakerAccess")
    public BaseCacheAdapter(@NonNull final BaseCursorAdapter cursorAdapter, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter) {
        mArrayAdapter = arrayAdapter;
        mConverter = converter;
        mCursorAdapter = cursorAdapter;
        setCurrentAdapter(false);
    }

    /**
     * Returns the cursor adapter component.
     *
     * @return  The BaseCursorAdapter
     */
    @NonNull
    public BaseCursorAdapter getCursorAdapter() {
        return mCursorAdapter;
    }

    /**
     * Returns the array adapter component.
     *
     * @return  The BaseArrayAdapter
     */
    @NonNull
    @SuppressWarnings("WeakerAccess")
    public BaseArrayAdapter<T> getArrayAdapter() {
        return mArrayAdapter;
    }

    /**
     * Updates the adapter with a new data.
     *  Most implementations should use {@link ValuesCacheAdapterWrapper#update} instead.
     *
     * @param data
     *        The new data
     *
     * @param isMerge
     *        {@code true} if new data should be merged with existing ones, {@code false} otherwise
     */
    public void update(@NonNull final BaseResponse<R, E, D> data, final boolean isMerge) {
        final Source source = data.getSource();
        switch(source) {
            case NETWORK:
                updateArray(mConverter.convert(data), isMerge);
                break;
            case CACHE:
                updateCursor(data.getCursor());
                break;
            case TIMEOUT:
            case UNKNOWN:
                CoreLogger.logWarning("nothing to update 'cause of " + source);
                break;
            default:
                CoreLogger.logError("unknown source " + source);
                break;
        }
    }

    @SuppressLint("ObsoleteSdkInt")
    private void addAll(final Collection<? extends T> collection) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
            mArrayAdapter.addAll(collection);
        else
            for (final T object : collection) mArrayAdapter.add(object);
    }

    /**
     * Updates the array adapter with a new data.
     *
     * @param collection
     *        The new data
     *
     * @param isMerge
     *        {@code true} if new data should be merged with existing ones, {@code false} otherwise
     */
    @MainThread
    @SuppressWarnings("WeakerAccess")
    public void updateArray(final Collection<? extends T> collection, final boolean isMerge) {
        setCurrentAdapter(true);
        if (!isMerge)
            mArrayAdapter.clear();
        if (collection != null)
            addAll(collection);
    }

    /**
     * Resets the array adapter.
     *  Most implementations should use {@link ValuesCacheAdapterWrapper#resetArray} instead.
     */
    public void resetArray() {
        mArrayAdapter.clear();
    }

    /**
     * Updates the cursor adapter with a new data.
     *
     * @param cursor
     *        The new data
     */
    @MainThread
    @SuppressWarnings("WeakerAccess")
    public void updateCursor(final Cursor cursor) {
        setCurrentAdapter(false);
        mCursorAdapter.swapCursor(cursor != null && cursor.getCount() > 0 ? cursor : null);
    }

    /**
     * Sets adapter to use.
     *
     * @param isArray
     *        {@code true} means the array adapter, {@code false} - the cursor one
     */
    @SuppressWarnings("WeakerAccess")
    public void setCurrentAdapter(final boolean isArray) {
        mBaseAdapter = isArray ? mArrayAdapter : (BaseAdapter) mCursorAdapter;
    }

    /**
     * Returns {@code true} if current adapter in use is the cursor one, {@code false} otherwise.
     *
     * @return  The current adapter flag
     */
    @SuppressWarnings("WeakerAccess")
    protected boolean isCursorAdapter() {
        return mBaseAdapter == mCursorAdapter;
    }

    /**
     * Registers the {@code ViewBinder} to use.
     * Most implementations should use {@link ValuesCacheAdapterWrapper#setAdapterViewBinder} instead.
     *
     * @param viewBinder
     *        The ViewBinder
     *
     * @return  This {@code BaseCacheAdapter} object
     *
     * @see BaseArrayAdapter#setAdapterViewBinder
     * @see BaseCursorAdapter#setAdapterViewBinder
     */
    @SuppressWarnings({ "unused", "UnusedReturnValue" })
    public BaseCacheAdapter<T, R, E, D> setAdapterViewBinder(final ViewBinder viewBinder) {
        mArrayAdapter.setAdapterViewBinder(viewBinder);
        mCursorAdapter.setAdapterViewBinder(viewBinder);
        return this;
    }

    // //////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * @exclude
     */
    @SuppressWarnings("JavaDoc")
    public static View findListView(@NonNull final View view) {
        return ViewHelper.findView(view, new ViewHelper.ViewVisitor() {

            @Override
            public boolean handle(final View view) {
                return view instanceof AbsListView || view instanceof RecyclerView;
            }
        });
    }

    /**
     * @exclude
     */
    @SuppressWarnings("JavaDoc")
    public static int[] getViewsBinding(@NonNull final Context context, @LayoutRes final int layoutId, @NonNull final Set<String> set) {
        final Map<Integer, String> map = Core.Utils.newMap();
        final Resources resources = context.getResources();
        final ViewInflater viewInflater = new ViewInflater(context, layoutId);
        ViewHelper.visitView(viewInflater.inflate(null), new ViewHelper.ViewVisitor() {

            @Override
            public boolean handle(final View view) {
                final int id = view.getId();
                if (id != Core.NOT_VALID_VIEW_ID && view.getVisibility() == View.VISIBLE && (view instanceof TextView || view instanceof ImageView))
                    map.put(id, resources.getResourceEntryName(id));
                // force to handle all views
                return !ViewHelper.VIEW_FOUND;
            }
        });
        CoreLogger.log(map.size() > 0 ? Level.DEBUG : Level.ERROR, "views binding: totally " + map.size());
        final int[] ids = new int[map.size()];
        set.clear();
        for (final Map.Entry<Integer, String> entry : map.entrySet()) {
            ids[set.size()] = entry.getKey();
            set.add(entry.getValue());
            CoreLogger.log("views binding: added " + entry.getValue());
        }
        return ids;
    }

    // //////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Please refer to the base method description.
     */
    @Override
    public Filter getFilter() {
        return isCursorAdapter() ? mCursorAdapter.getFilter() : mArrayAdapter.getFilter();
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public boolean areAllItemsEnabled() {
        return mBaseAdapter.areAllItemsEnabled();
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public boolean isEnabled(int position) {
        return mBaseAdapter.isEnabled(position);
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return mBaseAdapter.getDropDownView(position, convertView, parent);
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public int getCount() {
        return mBaseAdapter.getCount();
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    @SuppressWarnings("unchecked")
    public T gereplacedem(int position) {
        return (T) mBaseAdapter.gereplacedem(position);
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public long gereplacedemId(int position) {
        return mBaseAdapter.gereplacedemId(position);
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public int gereplacedemViewType(int position) {
        return mBaseAdapter.gereplacedemViewType(position);
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return mBaseAdapter.getView(position, convertView, parent);
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public int getViewTypeCount() {
        return mBaseAdapter.getViewTypeCount();
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public boolean hreplacedtableIds() {
        return mBaseAdapter.hreplacedtableIds();
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public boolean isEmpty() {
        return mBaseAdapter.isEmpty();
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public void registerDataSetObserver(DataSetObserver observer) {
        mCursorAdapter.registerDataSetObserver(observer);
        mArrayAdapter.registerDataSetObserver(observer);
    }

    /**
     * Please refer to the base method description.
     */
    @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {
        mCursorAdapter.unregisterDataSetObserver(observer);
        mArrayAdapter.unregisterDataSetObserver(observer);
    }

    // //////////////////////////////////////////////////////////////////////////////////////////////
    /**
     *  The adapter intended to use on modern devices (API version >= {@link android.os.Build.VERSION_CODES#M M}).
     *
     * @param <T>
     *        The type of {@code BaseResponse} values
     *
     * @param <R>
     *        The type of network response
     *
     * @param <E>
     *        The type of error (if any)
     *
     * @param <D>
     *        The type of data in this adapter
     */
    @TargetApi(Build.VERSION_CODES.M)
    public static clreplaced ApiMCacheAdapter<T, R, E, D> extends BaseCacheAdapter<T, R, E, D> implements ThemedSpinnerAdapter {

        /**
         * Initialises a newly created {@code ApiMCacheAdapter} object.
         *
         * @param context
         *        The Activity
         *
         * @param layoutId
         *        The resource identifier of a layout file that defines the views
         *
         * @param from
         *        The list of names representing the data to bind to the UI
         *
         * @param to
         *        The views that should display data in the "from" parameter
         *
         * @param arrayAdapter
         *        The BaseArrayAdapter
         *
         * @param converter
         *        The ArrayConverter
         */
        public ApiMCacheAdapter(@NonNull final Activity context, @LayoutRes final int layoutId, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter) {
            super(context, layoutId, from, to, arrayAdapter, converter);
        }

        /**
         * Please refer to the base method description.
         */
        @Override
        @SuppressWarnings("unchecked")
        public Resources.Theme getDropDownViewTheme() {
            return ((ThemedSpinnerAdapter) (isCursorAdapter() ? getCursorAdapter() : getArrayAdapter())).getDropDownViewTheme();
        }

        /**
         * Please refer to the base method description.
         */
        @Override
        public void setDropDownViewTheme(Resources.Theme theme) {
            if (isCursorAdapter())
                ((ThemedSpinnerAdapter) getCursorAdapter()).setDropDownViewTheme(theme);
            else
                getArrayAdapter().setDropDownViewTheme(theme);
        }
    }

    /**
     *  The adapter intended to use on devices with API version < {@link android.os.Build.VERSION_CODES#M M}.
     *
     * @param <T>
     *        The type of {@code BaseResponse} values
     *
     * @param <R>
     *        The type of network response
     *
     * @param <E>
     *        The type of error (if any)
     *
     * @param <D>
     *        The type of data in this adapter
     */
    public static clreplaced SupportCacheAdapter<T, R, E, D> extends BaseCacheAdapter<T, R, E, D> implements android.support.v7.widget.ThemedSpinnerAdapter {

        private final android.support.v7.widget.ThemedSpinnerAdapter.Helper mDropDownHelper;

        @LayoutRes
        private final int mLayoutId;

        /**
         * Initialises a newly created {@code SupportCacheAdapter} object.
         *
         * @param context
         *        The Activity
         *
         * @param layoutId
         *        The resource identifier of a layout file that defines the views
         *
         * @param from
         *        The list of names representing the data to bind to the UI
         *
         * @param to
         *        The views that should display data in the "from" parameter
         *
         * @param arrayAdapter
         *        The BaseArrayAdapter
         *
         * @param converter
         *        The ArrayConverter
         */
        public SupportCacheAdapter(@NonNull final Activity context, @LayoutRes final int layoutId, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter) {
            super(context, layoutId, from, to, arrayAdapter, converter);
            mDropDownHelper = new android.support.v7.widget.ThemedSpinnerAdapter.Helper(context);
            mLayoutId = layoutId;
        }

        /**
         * Please refer to the base method description.
         */
        @Override
        public Resources.Theme getDropDownViewTheme() {
            return mDropDownHelper.getDropDownViewTheme();
        }

        /**
         * Please refer to the base method description.
         */
        @Override
        public void setDropDownViewTheme(Resources.Theme theme) {
            mDropDownHelper.setDropDownViewTheme(theme);
        }

        /**
         * Please refer to the base method description.
         */
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            if (convertView == null)
                convertView = mDropDownHelper.getDropDownViewInflater().inflate(mLayoutId, parent, false);
            return super.getDropDownView(position, convertView, parent);
        }
    }

    /**
     * Factory used to create new {@code BaseCacheAdapter} instances.
     *
     * @param <T>
     *        The type of {@code BaseResponse} values
     *
     * @param <R>
     *        The type of network response
     *
     * @param <E>
     *        The type of error (if any)
     *
     * @param <D>
     *        The type of data in the adapter created
     */
    @SuppressWarnings("unused")
    public static clreplaced BaseCacheAdapterFactory<T, R, E, D> {

        /**
         * Initialises a newly created {@code BaseCacheAdapterFactory} object.
         */
        public BaseCacheAdapterFactory() {
        }

        /**
         * Returns a new {@code BaseCacheAdapter} instance.
         *
         * @param context
         *        The Activity
         *
         * @param layoutId
         *        The resource identifier of a layout file that defines the views
         *
         * @param from
         *        The list of names representing the data to bind to the UI
         *
         * @param to
         *        The views that should display data in the "from" parameter
         *
         * @param arrayAdapter
         *        The BaseArrayAdapter
         *
         * @param converter
         *        The ArrayConverter
         *
         * @param support
         *        {@code true} to return the {@code SupportCacheAdapter} instance, {@code false} otherwise
         *
         * @return  The {@code BaseCacheAdapter} instance
         */
        @SuppressLint("ObsoleteSdkInt")
        public BaseCacheAdapter<T, R, E, D> getAdapter(@NonNull final Activity context, @LayoutRes final int layoutId, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter, final boolean support) {
            if (support)
                return new SupportCacheAdapter<>(context, layoutId, from, to, arrayAdapter, converter);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
                return new ApiMCacheAdapter<>(context, layoutId, from, to, arrayAdapter, converter);
            else
                return new BaseCacheAdapter<>(context, layoutId, from, to, arrayAdapter, converter);
        }
    }

    /**
     * @exclude
     */
    @SuppressWarnings("JavaDoc")
    public static void bindImageView(@NonNull final Context context, @NonNull final ImageView imageView, final Object value) {
        final String strValue = getString(value);
        try {
            imageView.setImageResource(Integer.parseInt(strValue));
        } catch (NumberFormatException e) {
            Picreplacedo.with(context).load(getString(value)).into(imageView);
        }
    }

    /**
     * @exclude
     */
    @SuppressWarnings("JavaDoc")
    public static String getString(final Object value) {
        return value == null ? null : value instanceof Exception ? null : value instanceof byte[] ? "" : value.toString();
    }

    // //////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Extends {@code ArrayAdapter} to provide additional view binding possibilities
     * (the same way as in {@link android.widget.SimpleCursorAdapter}).
     *
     * @param <T>
     *        The type of {@code BaseResponse} values
     */
    @SuppressWarnings("WeakerAccess")
    public static clreplaced BaseArrayAdapter<T> extends ArrayAdapter<T> {

        private final DataBinder<T> mDataBinder;

        private final ViewInflater mViewInflater;

        /**
         * @exclude
         */
        @SuppressWarnings("JavaDoc")
        protected BaseArrayAdapter(@NonNull final Context context, @LayoutRes final int layoutId, @NonNull final DataBinder<T> dataBinder) {
            super(context, layoutId);
            mDataBinder = dataBinder;
            mViewInflater = new ViewInflater(context, layoutId);
        }

        /**
         * Gets the registered {@code ViewBinder} (if any).
         *
         * @return  Thee {@code ViewBinder} or null
         */
        @SuppressWarnings("unused")
        public ViewBinder getAdapterViewBinder() {
            return mDataBinder.getAdapterViewBinder();
        }

        /**
         * Registers the {@code ViewBinder}.
         * Most implementations should use {@link ValuesCacheAdapterWrapper#setAdapterViewBinder} instead.
         *
         * @param viewBinder
         *        The ViewBinder
         */
        public void setAdapterViewBinder(final ViewBinder viewBinder) {
            mDataBinder.setAdapterViewBinder(viewBinder);
        }

        /**
         * Please refer to the base method description.
         */
        @NonNull
        @Override
        public View getView(int position, View convertView, @NonNull ViewGroup parent) {
            return mDataBinder.bind(position, gereplacedem(position), convertView == null ? mViewInflater.inflate(parent) : convertView);
        }

        /**
         * @exclude
         */
        @SuppressWarnings("JavaDoc")
        public String[] getFrom() {
            return mDataBinder.mFrom;
        }

        /**
         * @exclude
         */
        @SuppressWarnings("JavaDoc")
        public int[] getTo() {
            return mDataBinder.mTo;
        }
    }

    // //////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * @exclude
     */
    @SuppressWarnings("JavaDoc")
    public static abstract clreplaced DataBinder<T> {

        private final Context mContext;

        private ViewBinder mViewBinder;

        @SuppressWarnings("WeakerAccess")
        protected final String[] mFrom;

        @SuppressWarnings("WeakerAccess")
        protected final int[] mTo;

        public DataBinder(@NonNull final Context context, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to) {
            mContext = context;
            mFrom = from;
            mTo = to;
        }

        public ViewBinder getAdapterViewBinder() {
            return mViewBinder;
        }

        public void setAdapterViewBinder(final ViewBinder viewBinder) {
            mViewBinder = viewBinder;
        }

        public View bind(final int position, final T item, final View mainView) {
            if (item == null) {
                CoreLogger.logError("item is null, position = " + position);
                return mainView;
            }
            for (int i = 0; i < mTo.length; i++) {
                final View view = mainView.findViewById(mTo[i]);
                if (view == null) {
                    CoreLogger.logError("view not found, index = " + i);
                    continue;
                }
                try {
                    setViewValue(view, item, i);
                } catch (Exception exception) {
                    CoreLogger.log("setViewValue failed", exception);
                }
            }
            return mainView;
        }

        private void setViewValue(@NonNull final View view, @NonNull final T item, final int index) {
            final Object value = getValue(item, index);
            final String strValue = getString(value);
            if (mViewBinder != null && mViewBinder.setViewValue(view, value, strValue == null ? "" : strValue))
                return;
            if (view instanceof Checkable)
                ((Checkable) view).setChecked(Boolean.parseBoolean(strValue));
            else if (view instanceof TextView)
                ((TextView) view).setText(strValue);
            else if (view instanceof ImageView)
                bindImageView(mContext, (ImageView) view, value);
            else
                CoreLogger.logError("not supported view type, index = " + index);
        }

        protected abstract Object getValue(@NonNull final T item, final int index);
    }

    // //////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * @exclude
     */
    @SuppressWarnings("JavaDoc")
    public static clreplaced ViewInflater {

        private final LayoutInflater mInflater;

        @LayoutRes
        private final int mLayoutId;

        public ViewInflater(@NonNull final Context context, @LayoutRes final int layoutId) {
            mLayoutId = layoutId;
            mInflater = LayoutInflater.from(context);
            if (mLayoutId == Core.NOT_VALID_RES_ID)
                CoreLogger.logError("item layout ID is not defined");
        }

        public View inflate(final ViewGroup parent) {
            return mLayoutId == Core.NOT_VALID_RES_ID ? null : mInflater.inflate(mLayoutId, parent, false);
        }

        @SuppressWarnings("unused")
        @LayoutRes
        public int getLayoutId() {
            return mLayoutId;
        }
    }
}

19 Source : ErrorsAdapter.java
with GNU General Public License v2.0
from 4455jkjh

public clreplaced ErrorsAdapter extends ErrorTree implements TreeAdapter<ErrorTree>, Runnable {

    @Override
    public boolean shouldShowExpandDrawable() {
        return false;
    }

    private Handler handler;

    private BaseAdapter adapter;

    public ErrorsAdapter() {
        super("");
    }

    @Override
    public String getMessage() {
        return "";
    }

    public void reset() {
        if (handler == null)
            handler = new Handler();
        handler.post(this);
    }

    @Override
    public void run() {
        childs.clear();
        Settings.project.addErrors(this);
        editor.showErrors(getChildCount() > 0);
        adapter.notifyDataSetChanged();
    }

    public void refresh() {
        if (adapter != null)
            adapter.notifyDataSetChanged();
    }

    @Override
    public void init(BaseAdapter adapter) {
        this.adapter = adapter;
    }

    @Override
    public ErrorTree getRoot() {
        return this;
    }

    @Override
    public int getChildCount(ErrorTree t) {
        return t.getChildCount();
    }

    @Override
    public ErrorTree getChild(ErrorTree t, int idx) {
        return t.getChild(idx);
    }

    @Override
    public void bindView(TextView name, ImageView icon, ErrorTree t) {
        name.setText(t.getMessage());
        t.setIcon(icon);
    }

    @Override
    public void onClick(ErrorTree t, View view) {
        t.click(view);
    }
}

19 Source : ErrorsAdapter.java
with GNU General Public License v2.0
from 4455jkjh

@Override
public void init(BaseAdapter adapter) {
    this.adapter = adapter;
}

18 Source : ActionSheetDialog.java
with Apache License 2.0
from Yuphee

/**
 * Dialog like iOS ActionSheet(iOS风格对话框)
 */
public clreplaced ActionSheetDialog extends BottomBaseDialog<ActionSheetDialog> {

    /**
     * ListView
     */
    private ListView mLv;

    /**
     * replacedle
     */
    private TextView mTvreplacedle;

    /**
     * replacedle underline(标题下划线)
     */
    private View mVLinereplacedle;

    /**
     * mCancel button(取消按钮)
     */
    private TextView mTvCancel;

    /**
     * corner radius,dp(圆角程度,单位dp)
     */
    private float mCornerRadius = 5;

    /**
     * replacedle background color(标题背景颜色)
     */
    private int mreplacedleBgColor = Color.parseColor("#ffffffff");

    /**
     * replacedle text(标题)
     */
    private String mreplacedle = "提示";

    /**
     * replacedle height(标题栏高度)
     */
    private float mreplacedleHeight = 48;

    /**
     * replacedle textcolor(标题颜色)
     */
    private int mreplacedleTextColor = Color.parseColor("#8F8F8F");

    /**
     * replacedle textsize(标题字体大小,单位sp)
     */
    private float mreplacedleTextSize = 17.5f;

    /**
     * ListView background color(ListView背景色)
     */
    private int mLvBgColor = Color.parseColor("#ffffffff");

    /**
     * divider color(ListView divider颜色)
     */
    private int mDividerColor = Color.parseColor("#D7D7D9");

    /**
     * divider height(ListView divider高度)
     */
    private float mDividerHeight = 0.8f;

    /**
     * item press color(ListView item按住颜色)
     */
    private int mItemPressColor = Color.parseColor("#ffcccccc");

    /**
     * item textcolor(ListView item文字颜色)
     */
    private int mItemTextColor = Color.parseColor("#44A2FF");

    /**
     * item textsize(ListView item文字大小)
     */
    private float mItemTextSize = 17.5f;

    /**
     * item height(ListView item高度)
     */
    private float mItemHeight = 48;

    /**
     * enable replacedle show(是否显示标题)
     */
    private boolean mIsreplacedleShow = true;

    /**
     * cancel btn text(取消按钮内容)
     */
    private String mCancelText = "取消";

    /**
     * cancel btn text color(取消按钮文字颜色)
     */
    private int mCancelTextColor = Color.parseColor("#44A2FF");

    /**
     * cancel btn text size(取消按钮文字大小)
     */
    private float mCancelTextSize = 17.5f;

    /**
     * adapter(自定义适配器)
     */
    private BaseAdapter mAdapter;

    /**
     * operation items(操作items)
     */
    private ArrayList<DialogMenuItem> mContents = new ArrayList<>();

    private OnOperItemClickL mOnOperItemClickL;

    private LayoutAnimationController mLac;

    public void setOnOperItemClickL(OnOperItemClickL onOperItemClickL) {
        mOnOperItemClickL = onOperItemClickL;
    }

    public ActionSheetDialog(Context context, ArrayList<DialogMenuItem> baseItems, View animateView) {
        super(context, animateView);
        mContents.addAll(baseItems);
        init();
    }

    public ActionSheetDialog(Context context, String[] items, View animateView) {
        super(context, animateView);
        mContents = new ArrayList<>();
        for (String item : items) {
            DialogMenuItem customBaseItem = new DialogMenuItem(item, 0);
            mContents.add(customBaseItem);
        }
        init();
    }

    public ActionSheetDialog(Context context, BaseAdapter adapter, View animateView) {
        super(context, animateView);
        mAdapter = adapter;
        init();
    }

    private void init() {
        widthScale(0.95f);
        /**
         * LayoutAnimation
         */
        TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 6f, Animation.RELATIVE_TO_SELF, 0);
        animation.setInterpolator(new DecelerateInterpolator());
        animation.setDuration(350);
        animation.setStartOffset(150);
        mLac = new LayoutAnimationController(animation, 0.12f);
        mLac.setInterpolator(new DecelerateInterpolator());
    }

    @Override
    public View onCreateView() {
        LinearLayout ll_container = new LinearLayout(mContext);
        ll_container.setOrientation(LinearLayout.VERTICAL);
        ll_container.setBackgroundColor(Color.TRANSPARENT);
        /**
         * replacedle
         */
        mTvreplacedle = new TextView(mContext);
        mTvreplacedle.setGravity(Gravity.CENTER);
        mTvreplacedle.setPadding(dp2px(10), dp2px(5), dp2px(10), dp2px(5));
        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        params.topMargin = dp2px(20);
        ll_container.addView(mTvreplacedle, params);
        /**
         * replacedle underline
         */
        mVLinereplacedle = new View(mContext);
        ll_container.addView(mVLinereplacedle);
        /**
         * listview
         */
        mLv = new ListView(mContext);
        mLv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1));
        mLv.setCacheColorHint(Color.TRANSPARENT);
        mLv.setFadingEdgeLength(0);
        mLv.setVerticalScrollBarEnabled(false);
        mLv.setSelector(new ColorDrawable(Color.TRANSPARENT));
        ll_container.addView(mLv);
        TextView cancelDivider = new TextView(mContext);
        cancelDivider.setGravity(Gravity.CENTER);
        cancelDivider.setBackgroundColor(Color.parseColor("#ffefefef"));
        LayoutParams clp = new LayoutParams(LayoutParams.MATCH_PARENT, 20);
        cancelDivider.setLayoutParams(clp);
        ll_container.addView(cancelDivider);
        /**
         * mCancel btn
         */
        mTvCancel = new TextView(mContext);
        mTvCancel.setGravity(Gravity.CENTER);
        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        lp.topMargin = dp2px(0);
        lp.bottomMargin = dp2px(0);
        mTvCancel.setLayoutParams(lp);
        ll_container.addView(mTvCancel);
        return ll_container;
    }

    @Override
    public void setUiBeforShow() {
        /**
         * replacedle
         */
        float radius = dp2px(mCornerRadius);
        mTvreplacedle.setHeight(dp2px(mreplacedleHeight));
        mTvreplacedle.setBackgroundDrawable(CornerUtils.cornerDrawable(mreplacedleBgColor, new float[] { radius, radius, radius, radius, 0, 0, 0, 0 }));
        mTvreplacedle.setText(mreplacedle);
        mTvreplacedle.setTextSize(TypedValue.COMPLEX_UNIT_SP, mreplacedleTextSize);
        mTvreplacedle.setTextColor(mreplacedleTextColor);
        mTvreplacedle.setVisibility(mIsreplacedleShow ? View.VISIBLE : View.GONE);
        /**
         * replacedle underline
         */
        mVLinereplacedle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dp2px(mDividerHeight)));
        mVLinereplacedle.setBackgroundColor(mDividerColor);
        mVLinereplacedle.setVisibility(mIsreplacedleShow ? View.VISIBLE : View.GONE);
        /**
         * mCancel btn
         */
        mTvCancel.setHeight(dp2px(mItemHeight));
        mTvCancel.setText(mCancelText);
        mTvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, mCancelTextSize);
        mTvCancel.setTextColor(mCancelTextColor);
        mTvCancel.setBackgroundDrawable(CornerUtils.lisreplacedemSelector(radius, mLvBgColor, mItemPressColor, 1, 0));
        mTvCancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
        /**
         * listview
         */
        mLv.setDivider(new ColorDrawable(mDividerColor));
        mLv.setDividerHeight(dp2px(mDividerHeight));
        if (mIsreplacedleShow) {
            mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, new float[] { 0, 0, 0, 0, radius, radius, radius, radius }));
        } else {
            mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, radius));
        }
        if (mAdapter == null) {
            mAdapter = new ListDialogAdapter();
        }
        mLv.setAdapter(mAdapter);
        mLv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (mOnOperItemClickL != null) {
                    mOnOperItemClickL.onOperItemClick(parent, view, position, id);
                }
            }
        });
        mLv.setLayoutAnimation(mLac);
    }

    /**
     * set replacedle background color(设置标题栏背景色)
     */
    public ActionSheetDialog replacedleBgColor(int replacedleBgColor) {
        mreplacedleBgColor = replacedleBgColor;
        return this;
    }

    /**
     * set replacedle text(设置标题内容)
     */
    public ActionSheetDialog replacedle(String replacedle) {
        mreplacedle = replacedle;
        return this;
    }

    /**
     * set replacedleHeight(设置标题高度)
     */
    public ActionSheetDialog replacedleHeight(float replacedleHeight) {
        mreplacedleHeight = replacedleHeight;
        return this;
    }

    /**
     * set replacedle textsize(设置标题字体大小)
     */
    public ActionSheetDialog replacedleTextSize_SP(float replacedleTextSize_SP) {
        mreplacedleTextSize = replacedleTextSize_SP;
        return this;
    }

    /**
     * set replacedle textcolor(设置标题字体颜色)
     */
    public ActionSheetDialog replacedleTextColor(int replacedleTextColor) {
        mreplacedleTextColor = replacedleTextColor;
        return this;
    }

    /**
     * enable replacedle show(设置标题是否显示)
     */
    public ActionSheetDialog isreplacedleShow(boolean isreplacedleShow) {
        mIsreplacedleShow = isreplacedleShow;
        return this;
    }

    /**
     * set ListView background color(设置ListView背景)
     */
    public ActionSheetDialog lvBgColor(int lvBgColor) {
        mLvBgColor = lvBgColor;
        return this;
    }

    /**
     * set corner radius(设置圆角程度,单位dp)
     */
    public ActionSheetDialog cornerRadius(float cornerRadius_DP) {
        mCornerRadius = cornerRadius_DP;
        return this;
    }

    /**
     * set divider color(ListView divider颜色)
     */
    public ActionSheetDialog dividerColor(int dividerColor) {
        mDividerColor = dividerColor;
        return this;
    }

    /**
     * set divider height(ListView divider高度)
     */
    public ActionSheetDialog dividerHeight(float dividerHeight_DP) {
        mDividerHeight = dividerHeight_DP;
        return this;
    }

    /**
     * set item press color(item按住颜色)
     */
    public ActionSheetDialog itemPressColor(int itemPressColor) {
        mItemPressColor = itemPressColor;
        return this;
    }

    /**
     * set item textcolor(item字体颜色)* @return ActionSheetDialog
     */
    public ActionSheetDialog itemTextColor(int itemTextColor) {
        mItemTextColor = itemTextColor;
        return this;
    }

    /**
     * set item textsize(item字体大小)
     */
    public ActionSheetDialog itemTextSize(float itemTextSize_SP) {
        mItemTextSize = itemTextSize_SP;
        return this;
    }

    /**
     * set item height(item高度)
     */
    public ActionSheetDialog itemHeight(float itemHeight_DP) {
        mItemHeight = itemHeight_DP;
        return this;
    }

    /**
     * set layoutAnimation(设置layout动画 ,传入null将不显示layout动画)
     */
    public ActionSheetDialog layoutAnimation(LayoutAnimationController lac) {
        mLac = lac;
        return this;
    }

    /**
     * set cancel btn text(设置取消按钮内容)
     */
    public ActionSheetDialog cancelText(String cancelText) {
        mCancelText = cancelText;
        return this;
    }

    /**
     * cancel btn text color(取消按钮文字颜色)
     */
    public ActionSheetDialog cancelText(int cancelTextColor) {
        mCancelTextColor = cancelTextColor;
        return this;
    }

    /**
     * cancel btn text size(取消按钮文字大小)
     */
    public ActionSheetDialog cancelTextSize(float cancelTextSize) {
        mCancelTextSize = cancelTextSize;
        return this;
    }

    clreplaced ListDialogAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return mContents.size();
        }

        @Override
        public Object gereplacedem(int position) {
            return null;
        }

        @Override
        public long gereplacedemId(int position) {
            return position;
        }

        @SuppressWarnings("deprecation")
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final DialogMenuItem item = mContents.get(position);
            LinearLayout llItem = new LinearLayout(mContext);
            llItem.setOrientation(LinearLayout.HORIZONTAL);
            llItem.setGravity(Gravity.CENTER_VERTICAL);
            ImageView ivItem = new ImageView(mContext);
            ivItem.setPadding(0, 0, dp2px(15), 0);
            llItem.addView(ivItem);
            TextView tvItem = new TextView(mContext);
            tvItem.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            tvItem.setSingleLine(true);
            tvItem.setGravity(Gravity.CENTER);
            tvItem.setTextColor(mItemTextColor);
            tvItem.setTextSize(TypedValue.COMPLEX_UNIT_SP, mItemTextSize);
            tvItem.setHeight(dp2px(mItemHeight));
            llItem.addView(tvItem);
            float radius = dp2px(mCornerRadius);
            if (mIsreplacedleShow) {
                llItem.setBackgroundDrawable((CornerUtils.lisreplacedemSelector(radius, Color.TRANSPARENT, mItemPressColor, position == mContents.size() - 1)));
            } else {
                llItem.setBackgroundDrawable(CornerUtils.lisreplacedemSelector(radius, Color.TRANSPARENT, mItemPressColor, mContents.size(), position));
            }
            ivItem.setImageResource(item.mResId);
            tvItem.setText(item.mOperName);
            ivItem.setVisibility(item.mResId == 0 ? View.GONE : View.VISIBLE);
            return llItem;
        }
    }
}

18 Source : DemoSecondActivity.java
with Apache License 2.0
from XuDeveloper

/**
 * Created by Xu on 2016/12/17.
 */
public clreplaced DemoSecondActivity extends AppCompatActivity implements AbsListView.OnScrollListener {

    private ArrayList<String> urls;

    private boolean mIsGridViewIdle;

    private GridView mGridView;

    private BaseAdapter mImageAdapter;

    private XImageLoaderConfig config;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        initDatas();
        initViews();
        // config settings
        config = new XImageLoaderConfig();
        config.setCache(new DoubleCache(DemoSecondActivity.this));
        config.setLoader(new OkhttpImageLoader());
        config.setLoadingResId(R.drawable.image_loading);
        config.setFailResId(R.drawable.image_fail);
    }

    private void initDatas() {
        mIsGridViewIdle = true;
        urls = new ArrayList<>();
        String[] imageUrls = { "http://image.bitauto.com/dealer/news/100041590/e6d8c821-176f-475c-8f32-23b65a66aa88.jpg", "http://img.jrjimg.cn/2014/10/20141028000128871.jpg", "http://n.sinaimg.cn/transform/20150116/x0aw-cczmvun5069864.jpg", "http://cms-bucket.nosdn.127.net/catchpic/9/93/935faaac49645138c6788301701f8ad1.jpg", "http://himg2.huanqiu.com/attachment2010/2013/1212/20131212021006631.jpg", "http://car.southcn.com/7/images/attachement/jpg/site4/20161104/c03fd5725abe19869a6c2d.jpg", "http://i2.dd-img.com/upload/2016/1107/1478495859583.jpg", "http://i.ce.cn/auto/auto/gundong/201611/08/W020161108584391202911.jpg", "http://img1.imgtn.bdimg.com/it/u=225246995,3631782845&fm=214&gp=0.jpg", "http://dingyue.nosdn.127.net/3OBv1SEb8G7cfex8z0waJhutyxOAzpKTgo4VVtJ5Wkitj1479286761337.jpg", "http://img.mp.itc.cn/upload/20161213/57de565f1f034d2ba1da6e6a5980086f_th.jpg", "http://news.xinhuanet.com/sports/replacedlepic/128082298_1438396856343_replacedle1n.jpg", "http://photocdn.sohu.com/20120613/Img345493678.jpg", "http://www.xnwbw.com/res/1/1/2016-02/21/A16/res01_attpic_brief.jpg", "http://img4.imgtn.bdimg.com/it/u=4063972650,2938693754&fm=11&gp=0.jpg" };
        for (String url : imageUrls) {
            urls.add(url);
        }
    }

    private void initViews() {
        mGridView = (GridView) findViewById(R.id.gridView);
        mImageAdapter = new ImageAdapter(this, urls);
        mGridView.setAdapter(mImageAdapter);
        mGridView.setOnScrollListener(this);
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
            mIsGridViewIdle = true;
            mImageAdapter.notifyDataSetChanged();
        } else {
            mIsGridViewIdle = false;
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    }

    private clreplaced ImageAdapter extends BaseAdapter {

        private LayoutInflater mInflater;

        private ArrayList<String> mUrls;

        private ImageAdapter(Context context, ArrayList<String> urls) {
            mInflater = LayoutInflater.from(context);
            this.mUrls = urls;
        }

        @Override
        public int getCount() {
            return mUrls.size();
        }

        @Override
        public String gereplacedem(int position) {
            return mUrls.get(position);
        }

        @Override
        public long gereplacedemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.image_list_item, parent, false);
                holder = new ViewHolder();
                holder.imageView = (ImageView) convertView.findViewById(R.id.image);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            ImageView imageView = holder.imageView;
            String url = gereplacedem(position);
            if (mIsGridViewIdle) {
                XImageLoader.build(DemoSecondActivity.this).imageview(config, imageView).load(url);
            }
            return convertView;
        }
    }

    clreplaced ViewHolder {

        ImageView imageView;
    }
}

18 Source : AdapterViewTestActivity.java
with Apache License 2.0
from wangzhzh

@SuppressWarnings("Convert2Lambda")
private void initListView() {
    ListView listView = findViewById(R.id.listView);
    BaseAdapter adapter = new SAListViewAdapter(this);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(AdapterViewTestActivity.this, "dd:" + position, Toast.LENGTH_SHORT).show();
        }
    });
}

18 Source : PicSeletorPresenter.java
with MIT License
from wangcantian

@Override
public <E> void updataAndNotifyAdapter(BaseAdapter adapter, List<E> adapterDatas, List<E> newDatas) {
    adapterDatas.clear();
    adapterDatas.addAll(newDatas);
    if (adapter != null)
        adapter.notifyDataSetChanged();
}

18 Source : WhitelistActivity.java
with GNU General Public License v3.0
from TheRedSpy15

public clreplaced WhitelistActivity extends AppCompatActivity {

    ListView listView;

    BaseAdapter adapter;

    private static List<String> whiteList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_whitelist);
        listView = findViewById(R.id.whitelistView);
        adapter = new ArrayAdapter<>(this, R.layout.custom_textview, getWhiteList());
        listView.setAdapter(adapter);
    }

    /**
     * Clears the whitelist, then sets it up again without loading saved one from stash
     * @param view the view that is clicked
     */
    public final void emptyWhitelist(View view) {
        new AlertDialog.Builder(WhitelistActivity.this, R.style.MyAlertDialogTheme).setreplacedle(R.string.reset_whitelist).setMessage(R.string.are_you_reset_whitelist).setPositiveButton(R.string.reset, (dialog, whichButton) -> {
            whiteList.clear();
            Stash.put("whiteList", whiteList);
            refreshListView();
        }).setNegativeButton(R.string.cancel, (dialog, whichButton) -> {
        }).show();
    }

    public void addRecommended(View view) {
        File externalDir = Environment.getExternalStorageDirectory();
        if (!whiteList.contains(new File(externalDir, "Music").getPath())) {
            whiteList.add(new File(externalDir, "Music").getPath());
            whiteList.add(new File(externalDir, "Podcasts").getPath());
            whiteList.add(new File(externalDir, "Ringtones").getPath());
            whiteList.add(new File(externalDir, "Alarms").getPath());
            whiteList.add(new File(externalDir, "Notifications").getPath());
            whiteList.add(new File(externalDir, "Pictures").getPath());
            whiteList.add(new File(externalDir, "Movies").getPath());
            whiteList.add(new File(externalDir, "Download").getPath());
            whiteList.add(new File(externalDir, "DCIM").getPath());
            whiteList.add(new File(externalDir, "Doreplacedents").getPath());
            Stash.put("whiteList", whiteList);
            refreshListView();
        } else
            Toast.makeText(this, "Already added", Toast.LENGTH_LONG).show();
    }

    /**
     * Creates a dialog asking for a file/folder name to add to the whitelist
     * @param view the view that is clicked
     */
    public final void addToWhiteList(View view) {
        final EditText input = new EditText(WhitelistActivity.this);
        new AlertDialog.Builder(WhitelistActivity.this, R.style.MyAlertDialogTheme).setreplacedle(R.string.add_to_whitelist).setMessage(R.string.enter_file_name).setView(input).setPositiveButton(R.string.add, (dialog, whichButton) -> {
            whiteList.add(String.valueOf(input.getText()));
            Stash.put("whiteList", whiteList);
            refreshListView();
        }).setNegativeButton(R.string.cancel, (dialog, whichButton) -> {
        }).show();
    }

    public void refreshListView() {
        runOnUiThread(() -> {
            adapter.notifyDataSetChanged();
            listView.invalidateViews();
            listView.refreshDrawableState();
        });
    }

    public static synchronized List<String> getWhiteList() {
        if (whiteList == null)
            whiteList = Stash.getArrayList("whiteList", String.clreplaced);
        return whiteList;
    }
}

18 Source : MultiChoiceSettingView.java
with BSD 3-Clause "New" or "Revised" License
from Parrot-Developers

public clreplaced MultiChoiceSettingView<T> extends LinearLayout {

    @NonNull
    private final List<T> mChoices;

    @Nullable
    private T mSelection;

    private boolean mUpdating;

    public interface OnItemChosenListener<T> {

        void onItemChosen(@NonNull T chosenItem);
    }

    private OnItemChosenListener<T> mListener;

    private final Spinner mChoiceView;

    private final ProgressBar mUpdatingView;

    public MultiChoiceSettingView(Context context) {
        this(context, null);
    }

    public MultiChoiceSettingView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MultiChoiceSettingView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setWillNotDraw(true);
        setSaveFromParentEnabled(false);
        LayoutInflater.from(context).inflate(R.layout.view_multichoice_setting, this);
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiChoiceSettingView, defStyleAttr, 0);
        try {
            ((TextView) findViewById(android.R.id.replacedle)).setText(a.getString(R.styleable.MultiChoiceSettingView_replacedle));
        } finally {
            a.recycle();
        }
        mChoices = new ArrayList<>();
        mChoiceView = findViewById(android.R.id.edit);
        mUpdatingView = findViewById(android.R.id.progress);
        mChoiceView.setAdapter(mAdapter);
        mChoiceView.setEmptyView(findViewById(android.R.id.empty));
        mChoiceView.setOnItemSelectedListener(mItemSelectedListener);
    }

    @NonNull
    public MultiChoiceSettingView<T> setUpdating(boolean updating) {
        if (mUpdating != updating) {
            mUpdating = updating;
            mUpdatingView.setVisibility(mUpdating ? VISIBLE : GONE);
            updateEnabledState();
        }
        return this;
    }

    @NonNull
    public MultiChoiceSettingView<T> setChoices(@NonNull Set<T> choices) {
        mChoices.clear();
        mChoices.addAll(choices);
        updateSelection();
        updateEnabledState();
        mAdapter.notifyDataSetChanged();
        return this;
    }

    @NonNull
    public MultiChoiceSettingView<T> setSelection(@Nullable T selection) {
        if (mSelection != selection) {
            mSelection = selection;
            updateSelection();
        }
        return this;
    }

    @NonNull
    public MultiChoiceSettingView<T> setListener(@Nullable OnItemChosenListener<T> listener) {
        mListener = listener;
        return this;
    }

    private void updateSelection() {
        mChoiceView.setSelection(mSelection == null ? AdapterView.INVALID_POSITION : mChoices.indexOf(mSelection));
    }

    private void updateEnabledState() {
        mChoiceView.setEnabled(!mUpdating && mChoices.size() > 1);
    }

    @SuppressWarnings("FieldCanBeLocal")
    private final AdapterView.OnItemSelectedListener mItemSelectedListener = new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            T userSelection = mChoices.get(position);
            if (mListener != null && userSelection != mSelection) {
                mSelection = userSelection;
                mListener.onItemChosen(userSelection);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    };

    private final BaseAdapter mAdapter = new BaseAdapter() {

        @Override
        public int getCount() {
            return mChoices.size();
        }

        @Override
        public T gereplacedem(int position) {
            return mChoices.get(position);
        }

        @Override
        public long gereplacedemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
            }
            ((TextView) convertView).setText(gereplacedem(position).toString());
            return convertView;
        }
    };
}

18 Source : CustomAlertDialog.java
with MIT License
from netease-im

public void setAdapter(final BaseAdapter adapter, final OnItemClickListener listener) {
    listAdapter = adapter;
    itemListener = listener;
}

18 Source : ItemEditActivity.java
with Apache License 2.0
from LingjuAI

/**
 * Created by Ken on 2016/12/16.
 */
public clreplaced ItemEditActivity extends GoBackActivity {

    public final static int FOR_ITEM_EDIT = 9;

    public final static int EXPENSE = 0;

    public final static int SUB_EXPENSE = 1;

    public final static int INCOME = 2;

    public final static String TYPE = "type";

    public final static String UPDATE = "update";

    private Intent intent;

    private int type = 0;

    private boolean update = false;

    private ListView listView;

    private Item parent;

    private AccounreplacedemDao dao;

    private List<Item> items;

    private List<SubItem> subItems;

    private LayoutInflater inflater;

    // 子项修改标记
    private boolean isSubAdd = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item_expense_edit);
        View statusBar = findViewById(R.id.status_bar);
        // 设置模拟状态栏的高度
        ViewGroup.LayoutParams layoutParams = statusBar.getLayoutParams();
        layoutParams.height = ScreenUtil.getStatusBarHeight(this);
        statusBar.setLayoutParams(layoutParams);
        listView = (ListView) findViewById(R.id.aiee_list);
        dao = AccounreplacedemDao.getInstance();
        intent = getIntent();
        if (intent != null) {
            type = intent.getIntExtra(TYPE, 0);
            if (type == SUB_EXPENSE) {
                long itemId = intent.getLongExtra("id", 0);
                if (itemId > 0)
                    parent = dao.findItemById(itemId);
            }
        }
        String replacedle = "";
        switch(type) {
            case EXPENSE:
                replacedle = "支出项目类别-编辑";
                items = dao.findAllByExpense(1);
                break;
            case SUB_EXPENSE:
                replacedle = parent.gereplacedem() + "子类别-编辑";
                subItems = dao.findAllByItemid(parent.getId());
                break;
            case INCOME:
                replacedle = "收入项目类别-编辑";
                items = dao.findAllByExpense(0);
                break;
        }
        ((TextView) findViewById(R.id.aiee_replacedle)).setText(replacedle);
        inflater = LayoutInflater.from(this);
        listView.setAdapter(adapter);
        findViewById(R.id.aiee_back).setOnClickListener(clickListener);
        findViewById(R.id.aiee_finish).setOnClickListener(clickListener);
        findViewById(R.id.aiee_add).setOnClickListener(clickListener);
        if (type == 0) {
            listView.setOnItemClickListener(itemListener);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data != null) {
            if (resultCode == FOR_ITEM_EDIT) {
                if (!update)
                    update = data.getBooleanExtra(UPDATE, false);
                isSubAdd = false;
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    private View.OnClickListener clickListener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            switch(v.getId()) {
                case R.id.aiee_back:
                    if (update) {
                        if (isSubAdd) {
                            intent.putExtra(UPDATE, true);
                            setResult(FOR_ITEM_EDIT, intent);
                        } else
                            EventBus.getDefault().post(new AccounreplacedemEvent());
                    }
                    goBack();
                    break;
                case R.id.aiee_finish:
                    if (update) {
                        if (isSubAdd) {
                            intent.putExtra(UPDATE, true);
                            setResult(FOR_ITEM_EDIT, intent);
                        } else
                            EventBus.getDefault().post(new AccounreplacedemEvent());
                    }
                    goBack();
                    break;
                case R.id.aiee_add:
                    final CommonEditDialog ced = new CommonEditDialog(ItemEditActivity.this, "添加类别名称", "", "取消", "确定");
                    ced.setHint("最多5个汉字");
                    ced.setOnConfirmListener(new CommonEditDialog.OnConfirmListener() {

                        @Override
                        public void onConfirm(String text) {
                            if (!TextUtils.isEmpty(text)) {
                                ced.cancel();
                                if (type == 1) {
                                    SubItem si = new SubItem(parent, text);
                                    update = true;
                                    dao.insertSubItem(si);
                                    subItems = dao.findAllByItemid(parent.getId());
                                    adapter.notifyDataSetChanged();
                                } else {
                                    Item it = new Item(text);
                                    if (type == EXPENSE)
                                        it.setExpense(1);
                                    update = true;
                                    dao.inserItem(it);
                                    items = dao.findAllByExpense(type == INCOME ? 0 : 1);
                                    adapter.notifyDataSetChanged();
                                }
                            }
                        }
                    }).show();
                    break;
            }
        }
    };

    private AdapterView.OnItemClickListener itemListener = new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(ItemEditActivity.this, ItemEditActivity.clreplaced);
            intent.putExtra(TYPE, SUB_EXPENSE);
            intent.putExtra("id", items.get(position).getId());
            startActivityForResult(intent, FOR_ITEM_EDIT);
            goInto();
            isSubAdd = true;
        }
    };

    private BaseAdapter adapter = new BaseAdapter() {

        View.OnClickListener listener = new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (v.getTag() instanceof Integer) {
                    final int p = (Integer) v.getTag();
                    switch(v.getId()) {
                        case R.id.iel_edit:
                            // CommonEditDialog ced=new CommonEditDialog(ItemEditActivity.this, "添加类别名称", "最多四个汉字", "取消", "确定");
                            if (type == 1) {
                                final CommonEditDialog commonEditDialog = new CommonEditDialog(ItemEditActivity.this, "修改类别名称", subItems.get(p).getName(), "取消", "确定");
                                commonEditDialog.setOnConfirmListener(new CommonEditDialog.OnConfirmListener() {

                                    @Override
                                    public void onConfirm(String text) {
                                        if (!TextUtils.isEmpty(text)) {
                                            subItems.get(p).setName(text);
                                            update = true;
                                            dao.updateSubItem(subItems.get(p));
                                            adapter.notifyDataSetChanged();
                                            commonEditDialog.cancel();
                                        }
                                    }
                                }).show();
                            } else {
                                final CommonEditDialog commonEditDialog = new CommonEditDialog(ItemEditActivity.this, "修改类别名称", items.get(p).gereplacedem(), "取消", "确定");
                                commonEditDialog.setOnConfirmListener(new CommonEditDialog.OnConfirmListener() {

                                    @Override
                                    public void onConfirm(String text) {
                                        if (!TextUtils.isEmpty(text)) {
                                            items.get(p).sereplacedem(text);
                                            update = true;
                                            dao.updateItem(items.get(p));
                                            adapter.notifyDataSetChanged();
                                            commonEditDialog.cancel();
                                        }
                                    }
                                }).show();
                            }
                            break;
                        case R.id.iel_del:
                            if (type == 1) {
                                final CommonDialog commonDialog = new CommonDialog(ItemEditActivity.this, "请选择是否删除", "删除“" + subItems.get(p).getName() + "”这条记录吗", "取消", "确定");
                                commonDialog.setOnConfirmListener(new CommonDialog.OnConfirmListener() {

                                    @Override
                                    public void onConfirm() {
                                        dao.deleteSubItem(subItems.get(p));
                                        update = true;
                                        subItems.remove(p);
                                        adapter.notifyDataSetChanged();
                                        commonDialog.cancel();
                                    }
                                }).show();
                            } else {
                                final CommonDialog commonDialog = new CommonDialog(ItemEditActivity.this, "请选择是否删除", "删除“" + items.get(p).gereplacedem() + "”这条记录吗", "取消", "确定");
                                commonDialog.setOnConfirmListener(new CommonDialog.OnConfirmListener() {

                                    @Override
                                    public void onConfirm() {
                                        dao.deleteItem(items.get(p));
                                        update = true;
                                        items.remove(p);
                                        adapter.notifyDataSetChanged();
                                        commonDialog.cancel();
                                    }
                                }).show();
                            }
                            break;
                    }
                }
            }
        };

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // LinearLayout main;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.item_edit_line, null);
                convertView.findViewById(R.id.iel_edit).setOnClickListener(listener);
                convertView.findViewById(R.id.iel_del).setOnClickListener(listener);
            }
            // main = (LinearLayout) convertView;
            if (type == 1) {
                ((TextView) convertView.findViewById(R.id.edit_line_text)).setText(subItems.get(position).getName());
                if (subItems.get(position).getId() > 121) {
                    convertView.findViewById(R.id.item_edit_line_box).setVisibility(View.VISIBLE);
                    convertView.findViewById(R.id.iel_edit).setTag(position);
                    convertView.findViewById(R.id.iel_del).setTag(position);
                } else {
                    convertView.findViewById(R.id.item_edit_line_box).setVisibility(View.GONE);
                }
            } else {
                ((TextView) convertView.findViewById(R.id.edit_line_text)).setText(items.get(position).gereplacedem());
                if (items.get(position).getId() > 16) {
                    convertView.findViewById(R.id.item_edit_line_box).setVisibility(View.VISIBLE);
                    convertView.findViewById(R.id.iel_edit).setTag(position);
                    convertView.findViewById(R.id.iel_del).setTag(position);
                } else {
                    convertView.findViewById(R.id.item_edit_line_box).setVisibility(View.GONE);
                }
            }
            return convertView;
        }

        @Override
        public boolean isEnabled(int position) {
            return type == 1 ? false : type == 2 ? false : true;
        }

        @Override
        public long gereplacedemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public Object gereplacedem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public int getCount() {
            return type == 1 ? subItems.size() : items.size();
        }
    };
}

18 Source : AlbumActivity.java
with MIT License
from Liberuman

/**
 * @author Freeman
 * @date 2017/12/21
 */
public clreplaced AlbumActivity extends AppCompatActivity {

    private GridView photoGrid;

    private BaseAdapter photoAdapter;

    private ArrayList<String> selectedPhotos = new ArrayList<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_album_layout);
        Button chooseButton = (Button) findViewById(R.id.choose_button);
        Button chooseWxButton = (Button) findViewById(R.id.choose_wx_button);
        photoGrid = (GridView) findViewById(R.id.photo_grid);
        int type = getIntent().getIntExtra("type", 0);
        if (!ImageLoaderManager.getInstance().isInit()) {
            if (type == 0) {
                ImageLoaderManager.getInstance().init(getApplicationContext(), new FrescoInstance());
            } else if (type == 1) {
                ImageLoaderManager.getInstance().init(getApplicationContext(), new UILInstance());
            } else if (type == 2) {
                ImageLoaderManager.getInstance().init(getApplicationContext(), new GlideInstance());
            } else {
            /**
             * Nothing
             */
            }
        }
        chooseButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                openDefaultPhotoPicker();
            }
        });
        chooseWxButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                openWxPhotoPicker();
            }
        });
    }

    /**
     * 使用默认的图片选择组件
     */
    private void openDefaultPhotoPicker() {
        PhotoPicker picker = new PhotoPicker.Builder().setIsDialog(false).setIsShowCamera(false).setMaxPhotoCount(9).setSelectedPhotos(selectedPhotos).builder();
        picker.chooseImage(AlbumActivity.this, new OnSelectPhotoListener() {

            @Override
            public void onSelected(ArrayList<String> selectedPhotoList) {
                selectedPhotos.clear();
                selectedPhotos.addAll(selectedPhotoList);
                setPhotoAdapter();
            }
        });
    }

    /**
     * 使用仿微信的图片选择组件 注意这种方式需要在onActivityResult获取选择结果
     */
    private void openWxPhotoPicker() {
        PhotoPicker picker = new PhotoPicker.Builder().setIsDialog(false).setIsShowCamera(false).setMaxPhotoCount(9).setSelectedPhotos(selectedPhotos).builder();
        picker.chooseImage(AlbumActivity.this, WxChoosePhotoActivity.clreplaced);
    }

    public static void enter(Context context, int imageLoaderType) {
        Intent intent = new Intent(context, AlbumActivity.clreplaced);
        intent.putExtra("type", imageLoaderType);
        context.startActivity(intent);
    }

    private void setPhotoAdapter() {
        if (photoAdapter == null) {
            final int itemSize = (DisplayUtil.getScreenWidth() - DisplayUtil.dpToPx(72)) / 3;
            final ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, itemSize);
            photoAdapter = new BaseAdapter() {

                @Override
                public int getCount() {
                    return selectedPhotos.size();
                }

                @Override
                public Object gereplacedem(int position) {
                    return selectedPhotos.get(position);
                }

                @Override
                public long gereplacedemId(int position) {
                    return position;
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    WrapImageView imageView = new WrapImageView(AlbumActivity.this);
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    ImageLoaderManager.getInstance().displayImage("file://" + gereplacedem(position), imageView, itemSize, itemSize);
                    imageView.setLayoutParams(params);
                    return imageView;
                }
            };
            photoGrid.setAdapter(photoAdapter);
        } else {
            photoAdapter.notifyDataSetChanged();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode != PhotoPicker.REQUEST_CODE_CHOOSE_PHOTO || data == null) {
            return;
        }
        List<String> photoList = data.getStringArrayListExtra(PhotoPicker.SELECTED_PHOTOS);
        if (photoList != null && photoList.size() > 0) {
            selectedPhotos.clear();
            selectedPhotos.addAll(photoList);
            setPhotoAdapter();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ImageLoaderManager.getInstance().onDestroy();
    }
}

18 Source : HintAdapterTest.java
with Apache License 2.0
from james602152002

@Before
public void setUp() throws Exception {
    BaseAdapter baseAdapter = new BaseAdapter() {

        @Override
        public int getCount() {
            return 0;
        }

        @Override
        public Object gereplacedem(int position) {
            return null;
        }

        @Override
        public long gereplacedemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return null;
        }
    };
    spinner = new FloatingLabelSpinner(InstrumentationRegistry.getInstrumentation().getTargetContext());
    spinner.setAdapter(baseAdapter);
    spinner.setHint("hint");
    adapter = (HintAdapter) spinner.getAdapter();
}

18 Source : SwipeRefreshLayoutActivity.java
with MIT License
from GitLqr

public clreplaced SwipeRefreshLayoutActivity extends AppCompatActivity {

    private SwipeRefreshLayout mSrl;

    private ListView mListView;

    private int number = 0;

    private List<String> mData = new ArrayList<>();

    private BaseAdapter mAdapter;

    private Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            mAdapter.notifyDataSetChanged();
            mSrl.setRefreshing(false);
        }
    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_swipe_refresh_layout);
        mSrl = (SwipeRefreshLayout) findViewById(R.id.srl);
        mListView = (ListView) findViewById(R.id.lv);
        setSwipeRefreshLayout();
        setListView();
    }

    private void setSwipeRefreshLayout() {
        // 设置 SwipeRefreshLayout 的尺寸
        mSrl.setSize(SwipeRefreshLayout.LARGE);
        // 设置 SwipeRefreshLayout 刷新时的颜色切换(可以有无数种)
        mSrl.setColorSchemeColors(Color.RED, Color.YELLOW, Color.GREEN);
        // 设置 SwipeRefreshLayout 的背景色
        mSrl.setBackgroundColor(Color.GRAY);
        // 设置 SwipeRefreshLayout 的下拉距离
        mSrl.setDistanceToTriggerSync(100);
        // 设置 SwipeRefreshLayout 正在刷新监听
        mSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

            @Override
            public void onRefresh() {
                for (int i = 0; i < 10; i++) {
                    mData.add(0, (++number) + "");
                }
                mHandler.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        mHandler.sendEmptyMessage(0);
                    }
                }, 3000);
            }
        });
    }

    private void setListView() {
        mAdapter = new BaseAdapter() {

            @Override
            public int getCount() {
                return mData.size();
            }

            @Override
            public String gereplacedem(int position) {
                return mData.get(position);
            }

            @Override
            public long gereplacedemId(int position) {
                return position;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView tv = new TextView(parent.getContext());
                AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 100);
                tv.setLayoutParams(params);
                tv.setBackgroundColor(Color.WHITE);
                tv.setText(gereplacedem(position));
                tv.setGravity(Gravity.CENTER);
                return tv;
            }
        };
        mListView.setAdapter(mAdapter);
    }
}

18 Source : ExfriendListActivity.java
with GNU Affero General Public License v3.0
from ferredoxin

@SuppressLint("Registered")
public clreplaced ExfriendListActivity extends IphonereplacedleBarActivityCompat {

    private static final int R_ID_EXL_replacedLE = 0x300AFF01;

    private static final int R_ID_EXL_SUBreplacedLE = 0x300AFF02;

    private static final int R_ID_EXL_FACE = 0x300AFF03;

    private static final int R_ID_EXL_STATUS = 0x300AFF04;

    private FaceImpl face;

    private ExfriendManager exm;

    private ArrayList<EventRecord> evs;

    private final BaseAdapter adapter = new BaseAdapter() {

        @Override
        public int getCount() {
            return ExfriendListActivity.this.getCount();
        }

        @Override
        public Object gereplacedem(int position) {
            return ExfriendListActivity.this.gereplacedem(position);
        }

        @Override
        public long gereplacedemId(int position) {
            return ExfriendListActivity.this.gereplacedemId(position);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return ExfriendListActivity.this.getView(position, convertView, parent);
        }
    };

    @Override
    public boolean doOnCreate(Bundle bundle) {
        super.doOnCreate(bundle);
        try {
            face = FaceImpl.getInstance();
        } catch (Throwable e) {
            log(e);
        }
        exm = ExfriendManager.getCurrent();
        reload();
        XListView sdlv = new XListView(this, null);
        sdlv.setFocusable(true);
        ViewGroup.LayoutParams mmlp = new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT);
        RelativeLayout.LayoutParams mwllp = new RelativeLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
        RelativeLayout rl = new RelativeLayout(ExfriendListActivity.this);
        rl.setId(R.id.rootMainLayout);
        sdlv.setId(R.id.rootMainList);
        mwllp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        mwllp.addRule(RelativeLayout.CENTER_VERTICAL);
        TextView tv = new TextView(ExfriendListActivity.this);
        tv.setGravity(Gravity.CENTER);
        tv.setTextColor(ResUtils.skin_gray3);
        tv.setTextSize(Utils.dip2sp(ExfriendListActivity.this, 14));
        rl.addView(tv, mwllp);
        rl.addView(sdlv, mmlp);
        setContentView(rl);
        setreplacedle("历史好友");
        TextView rightBtn = (TextView) getRightTextView();
        rightBtn.setVisibility(View.VISIBLE);
        rightBtn.setText("高级");
        rightBtn.setEnabled(true);
        rightBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                } catch (Throwable e) {
                    log(e);
                }
            }
        });
        sdlv.setDivider(null);
        long uin = Utils.getLongAccountUin();
        ExfriendManager exm = ExfriendManager.get(uin);
        exm.clearUnreadFlag();
        tv.setText("最后更新: " + getRelTimeStrSec(exm.lastUpdateTimeSec) + "\n长按列表可删除");
        ViewBuilder.listView_setAdapter(sdlv, adapter);
        setContentBackgroundDrawable(ResUtils.skin_background);
        ExfriendListActivity.this.getWindow().getDecorView().setTag(this);
        return true;
    }

    public void reload() {
        ConcurrentHashMap<Integer, EventRecord> eventsMap = exm.getEvents();
        if (evs == null) {
            evs = new ArrayList<>();
        } else {
            evs.clear();
        }
        if (eventsMap == null) {
            return;
        }
        Iterator<Map.Entry<Integer, EventRecord>> it = eventsMap.entrySet().iterator();
        EventRecord ev;
        while (it.hasNext()) {
            ev = it.next().getValue();
            evs.add(ev);
        }
        Collections.sort(evs);
    }

    public int getCount() {
        return evs.size();
    }

    public Object gereplacedem(int position) {
        return null;
    }

    public long gereplacedemId(int position) {
        return 0;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        EventRecord ev = evs.get(position);
        if (convertView == null) {
            // tv;
            convertView = inflateItemView(ev);
        }
        convertView.setTag(ev);
        TextView replacedle = convertView.findViewById(R_ID_EXL_replacedLE);
        replacedle.setText(ev.getShowStr());
        boolean isfri = false;
        TextView stat = convertView.findViewById(R_ID_EXL_STATUS);
        try {
            if (exm.getPersons().get(ev.operand).friendStatus == FriendRecord.STATUS_FRIEND_MUTUAL) {
                isfri = true;
            }
        } catch (Exception e) {
        }
        if (isfri) {
            stat.setTextColor(ResUtils.cloneColor(ResUtils.skin_gray3));
            stat.setText("已恢复");
        } else {
            stat.setTextColor(ResUtils.cloneColor(ResUtils.skin_red));
            stat.setText("已删除");
        }
        TextView subreplacedle = convertView.findViewById(R_ID_EXL_SUBreplacedLE);
        subreplacedle.setText(getIntervalDspMs(ev.timeRangeBegin * 1000, ev.timeRangeEnd * 1000));
        ImageView imgview = convertView.findViewById(R_ID_EXL_FACE);
        Bitmap bm = face.getBitmapFromCache(FaceImpl.TYPE_USER, "" + ev.operand);
        if (bm == null) {
            imgview.setImageDrawable(ResUtils.loadDrawableFromreplacedet("face.png", ExfriendListActivity.this));
            face.registerView(FaceImpl.TYPE_USER, "" + ev.operand, imgview);
        } else {
            imgview.setImageBitmap(bm);
        }
        return convertView;
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private View inflateItemView(EventRecord ev) {
        int tmp;
        RelativeLayout rlayout = new RelativeLayout(ExfriendListActivity.this);
        LinearLayout llayout = new LinearLayout(ExfriendListActivity.this);
        llayout.setGravity(Gravity.CENTER_VERTICAL);
        llayout.setOrientation(LinearLayout.HORIZONTAL);
        LinearLayout textlayout = new LinearLayout(ExfriendListActivity.this);
        textlayout.setOrientation(LinearLayout.VERTICAL);
        rlayout.setBackground(ResUtils.getLisreplacedemBackground());
        LinearLayout.LayoutParams imglp = new LinearLayout.LayoutParams(Utils.dip2px(ExfriendListActivity.this, 50), Utils.dip2px(ExfriendListActivity.this, 50));
        imglp.setMargins(tmp = Utils.dip2px(ExfriendListActivity.this, 6), tmp, tmp, tmp);
        ImageView imgview = new ImageView(ExfriendListActivity.this);
        imgview.setFocusable(false);
        imgview.setClickable(false);
        imgview.setId(R_ID_EXL_FACE);
        imgview.setScaleType(ImageView.ScaleType.FIT_XY);
        llayout.addView(imgview, imglp);
        LinearLayout.LayoutParams ltxtlp = new LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
        LinearLayout.LayoutParams textlp = new LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
        ltxtlp.setMargins(tmp = Utils.dip2px(ExfriendListActivity.this, 2), tmp, tmp, tmp);
        textlp.setMargins(tmp = Utils.dip2px(ExfriendListActivity.this, 1), tmp, tmp, tmp);
        llayout.addView(textlayout, ltxtlp);
        TextView replacedle = new TextView(ExfriendListActivity.this);
        replacedle.setId(R_ID_EXL_replacedLE);
        replacedle.setSingleLine();
        replacedle.setGravity(Gravity.CENTER_VERTICAL);
        replacedle.setTextColor(ResUtils.cloneColor(ResUtils.skin_black));
        replacedle.setTextSize(Utils.px2sp(ExfriendListActivity.this, Utils.dip2px(ExfriendListActivity.this, 16)));
        TextView subreplacedle = new TextView(ExfriendListActivity.this);
        subreplacedle.setId(R_ID_EXL_SUBreplacedLE);
        subreplacedle.setSingleLine();
        subreplacedle.setGravity(Gravity.CENTER_VERTICAL);
        subreplacedle.setTextColor(ResUtils.cloneColor(ResUtils.skin_gray3));
        subreplacedle.setTextSize(Utils.px2sp(ExfriendListActivity.this, Utils.dip2px(ExfriendListActivity.this, 14)));
        textlayout.addView(replacedle, textlp);
        textlayout.addView(subreplacedle, textlp);
        RelativeLayout.LayoutParams statlp = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
        TextView stat = new TextView(ExfriendListActivity.this);
        stat.setId(R_ID_EXL_STATUS);
        stat.setSingleLine();
        stat.setGravity(Gravity.CENTER);
        stat.setTextSize(Utils.px2sp(ExfriendListActivity.this, Utils.dip2px(ExfriendListActivity.this, 16)));
        statlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        statlp.addRule(RelativeLayout.CENTER_VERTICAL);
        statlp.rightMargin = Utils.dip2px(ExfriendListActivity.this, 16);
        rlayout.addView(llayout);
        rlayout.addView(stat, statlp);
        rlayout.setClickable(true);
        rlayout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                long uin = ((EventRecord) v.getTag()).operand;
                MainHook.openProfileCard(v.getContext(), uin);
            }
        });
        rlayout.setOnLongClickListener(new View.OnLongClickListener() {

            @Override
            public boolean onLongClick(final View v) {
                try {
                    CustomDialog dialog = CustomDialog.create(ExfriendListActivity.this);
                    dialog.setreplacedle("删除记录");
                    dialog.setMessage("确认删除历史记录(" + ((EventRecord) v.getTag())._remark + ")");
                    dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            exm.getEvents().values().remove(v.getTag());
                            exm.saveConfigure();
                            reload();
                            adapter.notifyDataSetChanged();
                        }
                    });
                    dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
                    dialog.show();
                } catch (Exception e) {
                    log(e);
                }
                return true;
            }
        });
        return rlayout;
    }
}

18 Source : BannerPageView.java
with Apache License 2.0
from chengkun123

/**
 * Created by Lenovo.
 */
public clreplaced BannerPageView extends ViewPager {

    private final static String TAG = "BannerPageView";

    private BaseAdapter mAdapter;

    // 发送消息的message
    private final int SCROLL_MSG = 0x0011;

    // 页面切换间隔时间
    private int mCountDownTime = 4000;

    private BannerScroller mScroller;

    // 复用销毁的界面
    private List<View> mConvertViews;

    private Activity mActivity;

    private Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // Log.e(TAG, "mHandler新建了");
            setCurrenreplacedem(getCurrenreplacedem() + 1);
            startRoll();
        }
    };

    public BannerPageView(Context context) {
        this(context, null);
    }

    public BannerPageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mActivity = (Activity) context;
        mScroller = new BannerScroller(context);
        try {
            Field field = ViewPager.clreplaced.getDeclaredField("mScroller");
            // 因为是私有变量
            field.setAccessible(true);
            // 第一个参数代表当前属性在哪个类,第二个参数代表参数要设置的值
            field.set(this, mScroller);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        mConvertViews = new ArrayList<>();
    }

    public void setAdapter(BaseAdapter adapter) {
        setAdapter(new BannerPagerAdapter());
        mAdapter = adapter;
        // 监听Activity生命周期
        mActivity.getApplication().registerActivityLifecycleCallbacks(mActivityCallbacks);
    }

    public void startRoll() {
        // Log.e(TAG, "startRoll");
        mHandler.sendEmptyMessageDelayed(SCROLL_MSG, mCountDownTime);
    // resetRoll();
    }

    public void setScrollerDuaration(int duaration) {
        mScroller.setScrollerDuaration(duaration);
        resetRoll();
    }

    public void setScrollerCountDown(int countDown) {
        mCountDownTime = countDown;
        resetRoll();
    }

    public void resetRoll() {
        mHandler.removeMessages(SCROLL_MSG);
        mHandler.sendEmptyMessageDelayed(SCROLL_MSG, mCountDownTime);
    }

    private clreplaced BannerPagerAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View bannerItemView = mAdapter.getView(position % mAdapter.getCount(), getConvertView(position), container);
            container.addView(bannerItemView);
            return bannerItemView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
            if (!mConvertViews.contains((View) object)) {
                mConvertViews.add((View) object);
            }
        }
    }

    private View getConvertView(int position) {
        int size = mConvertViews.size();
        // Log.e("mConvertViews", "mConvertViews size:" + mConvertViews.size());
        for (int i = 0; i < size; i++) {
            if (mConvertViews.get(i).getParent() == null) {
                return mConvertViews.get(i);
            }
        }
        return null;
    }

    /*
    * 防止内存泄漏
    * */
    @Override
    protected void onDetachedFromWindow() {
        /*Log.e(TAG, "onDetachedFromWindow");
        if(mHandler != null){
            mHandler.removeMessages(SCROLL_MSG);
            mHandler = null;
        }
        if(mActivity != null){
            mActivity.getApplication().unregisterActivityLifecycleCallbacks(mActivityCallbacks);
        }*/
        super.onDetachedFromWindow();
    }

    /*
    * Activity没有显示的时候逻辑上是不需要进行切换的
    *
    * */
    private Application.ActivityLifecycleCallbacks mActivityCallbacks = new SimpleActivityCallbacks() {

        @Override
        public void onActivityResumed(Activity activity) {
            super.onActivityResumed(activity);
            Log.e(TAG, "onActivityResumed");
            if (activity == mActivity) {
                mHandler.sendEmptyMessageDelayed(mCountDownTime, SCROLL_MSG);
            }
        }

        @Override
        public void onActivityPaused(Activity activity) {
            super.onActivityPaused(activity);
            if (activity == mActivity) {
                mHandler.removeMessages(SCROLL_MSG);
            }
        }
    };
}

18 Source : ChooseCartridgeDialog.java
with GNU General Public License v3.0
from cgeo

public clreplaced ChooseCartridgeDialog extends CustomDialogFragment {

    private static final String TAG = "ChooseCartridgeDialog";

    private ArrayList<DataInfo> data;

    private BaseAdapter adapter;

    private Vector<CartridgeFile> cartridgeFiles;

    public ChooseCartridgeDialog() {
        super();
    }

    @Override
    public Dialog createDialog(Bundle savedInstanceState) {
        if (A.getMain() == null || cartridgeFiles == null) {
            return null;
        }
        try {
            // sort cartridges
            final Location actLoc = LocationState.getLocation();
            final Location loc1 = new Location(TAG);
            final Location loc2 = new Location(TAG);
            Collections.sort(cartridgeFiles, (object1, object2) -> {
                loc1.setLareplacedude(object1.lareplacedude);
                loc1.setLongitude(object1.longitude);
                loc2.setLareplacedude(object2.lareplacedude);
                loc2.setLongitude(object2.longitude);
                return (int) (actLoc.distanceTo(loc1) - actLoc.distanceTo(loc2));
            });
            // prepare list
            data = new ArrayList<>();
            for (int i = 0; i < cartridgeFiles.size(); i++) {
                CartridgeFile file = cartridgeFiles.get(i);
                byte[] iconData = file.getFile(file.iconId);
                Bitmap icon;
                try {
                    icon = BitmapFactory.decodeByteArray(iconData, 0, iconData.length);
                } catch (Exception e) {
                    icon = Images.getImageB(R.drawable.icon_gc_wherigo);
                }
                DataInfo di = new DataInfo(file.name, file.type + ", " + file.author + ", " + file.version, icon);
                di.value01 = file.lareplacedude;
                di.value02 = file.longitude;
                di.setDistAzi(actLoc);
                data.add(di);
            }
            // create listView
            ListView listView = UtilsGUI.createListView(getActivity(), false, data);
            // set click listener
            listView.setOnItemClickListener((parent, view, position, id) -> itemClicked(position));
            // set on long click listener for file deletion
            listView.setOnItemLongClickListener((parent, view, position, id) -> {
                itemLongClicked(position);
                return true;
            });
            adapter = (BaseAdapter) listView.getAdapter();
            // construct dialog
            return new AlertDialog.Builder(getActivity()).setreplacedle(R.string.choose_cartridge).setIcon(R.drawable.ic_replacedle_logo).setView(listView).setNeutralButton(R.string.close, null).create();
        } catch (Exception e) {
            Logger.e(TAG, "createDialog()", e);
        }
        return null;
    }

    private void itemClicked(int position) {
        try {
            MainActivity.openCartridge(cartridgeFiles.get(position));
        } catch (Exception e) {
            Logger.e(TAG, "onCreate()", e);
        }
        dismiss();
    }

    private void itemLongClicked(final int position) {
        try {
            final CartridgeFile cartridgeFile = cartridgeFiles.get(position);
            final String filename = cartridgeFile.filename.substring(0, cartridgeFile.filename.length() - 3);
            UtilsGUI.showDialogQuestion(getActivity(), R.string.delete_cartridge, (dialog, btn) -> {
                File[] files = FileSystem.getFiles2(new File(cartridgeFile.filename).getParent(), pathname -> pathname.getAbsolutePath().startsWith(filename));
                for (File file : files) {
                    file.delete();
                }
                MainActivity.refreshCartridges();
                cartridgeFiles.remove(position);
                data.remove(position);
                if (adapter != null)
                    adapter.notifyDataSetChanged();
            }, null);
        } catch (Exception e) {
            Logger.e(TAG, "onCreate()", e);
        }
    }

    public void setParams(Vector<CartridgeFile> cartridgeFiles) {
        this.cartridgeFiles = cartridgeFiles;
    }
}

18 Source : InfiniteCardView.java
with Apache License 2.0
from BakerJQ

/**
 * set view adapter
 *
 * @param adapter adapter
 */
public void setAdapter(BaseAdapter adapter) {
    this.mAdapter = adapter;
    mAdapter.registerDataSetObserver(new DataSetObserver() {

        @Override
        public void onChanged() {
            mAnimationHelper.notifyDataSetChanged(mAdapter);
        }
    });
    mAnimationHelper.initAdapterView(adapter, true);
}

18 Source : VoicePlayClickListener.java
with MIT License
from AnyPeer

public clreplaced VoicePlayClickListener implements View.OnClickListener {

    private ChatMessage message;

    private String filePath;

    private ImageView voiceIconView;

    private AnimationDrawable voiceAnimation = null;

    MediaPlayer mediaPlayer = null;

    Activity activity;

    private BaseAdapter adapter;

    public static boolean isPlaying = false;

    public static VoicePlayClickListener currentPlayListener = null;

    VoicePlayClickListener(ChatMessage message, ImageView v, BaseAdapter adapter, Activity activity) {
        this.message = message;
        filePath = message.getFilePath();
        this.adapter = adapter;
        voiceIconView = v;
        this.activity = activity;
    }

    void stopPlayVoice() {
        voiceAnimation.stop();
        if (ChatMessage.Direct.getMsgDirect(message.getDirect()) == ChatMessage.Direct.RECEIVE) {
            voiceIconView.setImageResource(R.drawable.chatfrom_voice_playing);
        } else {
            voiceIconView.setImageResource(R.drawable.chatto_voice_playing);
        }
        // stop play voice
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer.release();
        }
        isPlaying = false;
        ((ChatActivity) activity).playMsgId = null;
        adapter.notifyDataSetChanged();
    }

    void playVoice(String filePath) {
        if (!(new File(filePath).exists())) {
            return;
        }
        ((ChatActivity) activity).playMsgId = message.getMsgId();
        AudioManager audioManager = (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
        mediaPlayer = new MediaPlayer();
        // if (EMChatManager.getInstance().getChatOptions().getUseSpeaker()) {
        audioManager.setMode(AudioManager.MODE_NORMAL);
        audioManager.setSpeakerphoneOn(true);
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
        // } else {
        // audioManager.setSpeakerphoneOn(false);// 关闭扬声器
        // // 把声音设定成Earpiece(听筒)出来,设定为正在通话中
        // audioManager.setMode(AudioManager.MODE_IN_CALL);
        // mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
        // }
        try {
            mediaPlayer.setDataSource(filePath);
            mediaPlayer.prepare();
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    mediaPlayer.release();
                    mediaPlayer = null;
                    // stop animation
                    stopPlayVoice();
                }
            });
            isPlaying = true;
            currentPlayListener = this;
            mediaPlayer.start();
            showAnimation();
        } catch (Exception e) {
        }
    }

    // show the voice playing animation
    private void showAnimation() {
        // play voice, and start animation
        if (ChatMessage.Direct.getMsgDirect(message.getDirect()) == ChatMessage.Direct.RECEIVE) {
            voiceIconView.setImageResource(R.drawable.voice_from_icon);
        } else {
            voiceIconView.setImageResource(R.drawable.voice_to_icon);
        }
        voiceAnimation = (AnimationDrawable) voiceIconView.getDrawable();
        voiceAnimation.start();
    }

    @Override
    public void onClick(View v) {
        // String st = activity.getResources().getString(R.string.Is_download_voice_click_later);
        if (isPlaying) {
            if (((ChatActivity) activity).playMsgId != null && ((ChatActivity) activity).playMsgId.equals(message.getMsgId())) {
                currentPlayListener.stopPlayVoice();
                return;
            }
            currentPlayListener.stopPlayVoice();
        }
        playVoice(filePath);
    }
}

18 Source : ActionSheetDialog.java
with MIT License
from AndroidPureLand

/**
 * Dialog like iOS ActionSheet(iOS风格对话框)
 */
public clreplaced ActionSheetDialog extends BottomBaseDialog<ActionSheetDialog> {

    /**
     * ListView
     */
    private ListView mLv;

    /**
     * replacedle
     */
    private TextView mTvreplacedle;

    /**
     * replacedle underline(标题下划线)
     */
    private View mVLinereplacedle;

    /**
     * mCancel button(取消按钮)
     */
    private TextView mTvCancel;

    /**
     * corner radius,dp(圆角程度,单位dp)
     */
    private float mCornerRadius = 5;

    /**
     * replacedle background color(标题背景颜色)
     */
    private int mreplacedleBgColor = Color.parseColor("#ddffffff");

    /**
     * replacedle text(标题)
     */
    private String mreplacedle = "提示";

    /**
     * replacedle height(标题栏高度)
     */
    private float mreplacedleHeight = 48;

    /**
     * replacedle textcolor(标题颜色)
     */
    private int mreplacedleTextColor = Color.parseColor("#8F8F8F");

    /**
     * replacedle textsize(标题字体大小,单位sp)
     */
    private float mreplacedleTextSize = 17.5f;

    /**
     * ListView background color(ListView背景色)
     */
    private int mLvBgColor = Color.parseColor("#ddffffff");

    /**
     * ListView background color(ListView背景色)
     */
    private int mCancelBgColor = Color.parseColor("#e83e41");

    /**
     * divider color(ListView divider颜色)
     */
    private int mDividerColor = Color.parseColor("#D7D7D9");

    /**
     * divider height(ListView divider高度)
     */
    private float mDividerHeight = 0.8f;

    /**
     * item press color(ListView item按住颜色)
     */
    private int mItemPressColor = Color.parseColor("#ffcccccc");

    /**
     * item textcolor(ListView item文字颜色)
     */
    private int mItemTextColor = Color.parseColor("#44A2FF");

    /**
     * item textsize(ListView item文字大小)
     */
    private float mItemTextSize = 17.5f;

    /**
     * item height(ListView item高度)
     */
    private float mItemHeight = 48;

    /**
     * enable replacedle show(是否显示标题)
     */
    private boolean mIsreplacedleShow = true;

    /**
     * cancel btn text(取消按钮内容)
     */
    private String mCancelText = "取消";

    /**
     * cancel btn text color(取消按钮文字颜色)
     */
    private int mCancelTextColor = Color.parseColor("#44A2FF");

    /**
     * cancel btn text size(取消按钮文字大小)
     */
    private float mCancelTextSize = 17.5f;

    /**
     * adapter(自定义适配器)
     */
    private BaseAdapter mAdapter;

    /**
     * operation items(操作items)
     */
    private ArrayList<DialogMenuItem> mContents = new ArrayList<>();

    private OnOperItemClickL mOnOperItemClickL;

    private LayoutAnimationController mLac;

    public void setOnOperItemClickL(OnOperItemClickL onOperItemClickL) {
        mOnOperItemClickL = onOperItemClickL;
    }

    public ActionSheetDialog(Context context, ArrayList<DialogMenuItem> baseItems, View animateView) {
        super(context, animateView);
        mContents.addAll(baseItems);
        init();
    }

    public ActionSheetDialog(Context context, String[] items, View animateView) {
        super(context, animateView);
        mContents = new ArrayList<>();
        for (String item : items) {
            DialogMenuItem customBaseItem = new DialogMenuItem(item, 0);
            mContents.add(customBaseItem);
        }
        init();
    }

    public ActionSheetDialog(Context context, BaseAdapter adapter, View animateView) {
        super(context, animateView);
        mAdapter = adapter;
        init();
    }

    private void init() {
        widthScale(0.95f);
        /**
         * LayoutAnimation
         */
        TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 6f, Animation.RELATIVE_TO_SELF, 0);
        animation.setInterpolator(new DecelerateInterpolator());
        animation.setDuration(350);
        animation.setStartOffset(150);
        mLac = new LayoutAnimationController(animation, 0.12f);
        mLac.setInterpolator(new DecelerateInterpolator());
    }

    @Override
    public View onCreateView() {
        LinearLayout ll_container = new LinearLayout(mContext);
        ll_container.setOrientation(LinearLayout.VERTICAL);
        ll_container.setBackgroundColor(Color.TRANSPARENT);
        /**
         * replacedle
         */
        mTvreplacedle = new TextView(mContext);
        mTvreplacedle.setGravity(Gravity.CENTER);
        mTvreplacedle.setPadding(dp2px(10), dp2px(5), dp2px(10), dp2px(5));
        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        params.topMargin = dp2px(20);
        ll_container.addView(mTvreplacedle, params);
        /**
         * replacedle underline
         */
        mVLinereplacedle = new View(mContext);
        ll_container.addView(mVLinereplacedle);
        /**
         * listview
         */
        mLv = new ListView(mContext);
        mLv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1));
        mLv.setCacheColorHint(Color.TRANSPARENT);
        mLv.setFadingEdgeLength(0);
        mLv.setVerticalScrollBarEnabled(false);
        mLv.setSelector(new ColorDrawable(Color.TRANSPARENT));
        ll_container.addView(mLv);
        /**
         * mCancel btn
         */
        mTvCancel = new TextView(mContext);
        mTvCancel.setGravity(Gravity.CENTER);
        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        lp.topMargin = dp2px(7);
        lp.bottomMargin = dp2px(7);
        mTvCancel.setLayoutParams(lp);
        ll_container.addView(mTvCancel);
        return ll_container;
    }

    @Override
    public void setUiBeforShow() {
        /**
         * replacedle
         */
        float radius = dp2px(mCornerRadius);
        mTvreplacedle.setHeight(dp2px(mreplacedleHeight));
        mTvreplacedle.setBackgroundDrawable(CornerUtils.cornerDrawable(mreplacedleBgColor, new float[] { radius, radius, radius, radius, 0, 0, 0, 0 }));
        mTvreplacedle.setText(mreplacedle);
        mTvreplacedle.setTextSize(TypedValue.COMPLEX_UNIT_SP, mreplacedleTextSize);
        mTvreplacedle.setTextColor(mreplacedleTextColor);
        mTvreplacedle.setVisibility(mIsreplacedleShow ? View.VISIBLE : View.GONE);
        /**
         * replacedle underline
         */
        mVLinereplacedle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dp2px(mDividerHeight)));
        mVLinereplacedle.setBackgroundColor(mDividerColor);
        mVLinereplacedle.setVisibility(mIsreplacedleShow ? View.VISIBLE : View.GONE);
        /**
         * mCancel btn
         */
        mTvCancel.setHeight(dp2px(mItemHeight));
        mTvCancel.setText(mCancelText);
        mTvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, mCancelTextSize);
        mTvCancel.setTextColor(mCancelTextColor);
        mTvCancel.setBackgroundDrawable(CornerUtils.lisreplacedemSelector(radius, mCancelBgColor, mItemPressColor, 1, 0));
        mTvCancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
        /**
         * listview
         */
        mLv.setDivider(new ColorDrawable(mDividerColor));
        mLv.setDividerHeight(dp2px(mDividerHeight));
        if (mIsreplacedleShow) {
            mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, new float[] { 0, 0, 0, 0, radius, radius, radius, radius }));
        } else {
            mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, radius));
        }
        if (mAdapter == null) {
            mAdapter = new ListDialogAdapter();
        }
        mLv.setAdapter(mAdapter);
        mLv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (mOnOperItemClickL != null) {
                    mOnOperItemClickL.onOperItemClick(parent, view, position, id);
                }
            }
        });
        mLv.setLayoutAnimation(mLac);
    }

    /**
     * set replacedle background color(设置标题栏背景色)
     */
    public ActionSheetDialog replacedleBgColor(int replacedleBgColor) {
        mreplacedleBgColor = replacedleBgColor;
        return this;
    }

    /**
     * set replacedle text(设置标题内容)
     */
    public ActionSheetDialog replacedle(String replacedle) {
        mreplacedle = replacedle;
        return this;
    }

    /**
     * set replacedleHeight(设置标题高度)
     */
    public ActionSheetDialog replacedleHeight(float replacedleHeight) {
        mreplacedleHeight = replacedleHeight;
        return this;
    }

    /**
     * set replacedle textsize(设置标题字体大小)
     */
    public ActionSheetDialog replacedleTextSize_SP(float replacedleTextSize_SP) {
        mreplacedleTextSize = replacedleTextSize_SP;
        return this;
    }

    /**
     * set replacedle textcolor(设置标题字体颜色)
     */
    public ActionSheetDialog replacedleTextColor(int replacedleTextColor) {
        mreplacedleTextColor = replacedleTextColor;
        return this;
    }

    /**
     * enable replacedle show(设置标题是否显示)
     */
    public ActionSheetDialog isreplacedleShow(boolean isreplacedleShow) {
        mIsreplacedleShow = isreplacedleShow;
        return this;
    }

    /**
     * set ListView background color(设置ListView背景)
     */
    public ActionSheetDialog lvBgColor(int lvBgColor) {
        mLvBgColor = lvBgColor;
        return this;
    }

    /**
     * set corner radius(设置圆角程度,单位dp)
     */
    public ActionSheetDialog cornerRadius(float cornerRadius_DP) {
        mCornerRadius = cornerRadius_DP;
        return this;
    }

    /**
     * set divider color(ListView divider颜色)
     */
    public ActionSheetDialog dividerColor(int dividerColor) {
        mDividerColor = dividerColor;
        return this;
    }

    /**
     * set divider height(ListView divider高度)
     */
    public ActionSheetDialog dividerHeight(float dividerHeight_DP) {
        mDividerHeight = dividerHeight_DP;
        return this;
    }

    /**
     * set item press color(item按住颜色)
     */
    public ActionSheetDialog itemPressColor(int itemPressColor) {
        mItemPressColor = itemPressColor;
        return this;
    }

    /**
     * set item textcolor(item字体颜色)* @return ActionSheetDialog
     */
    public ActionSheetDialog itemTextColor(int itemTextColor) {
        mItemTextColor = itemTextColor;
        return this;
    }

    /**
     * set item textsize(item字体大小)
     */
    public ActionSheetDialog itemTextSize(float itemTextSize_SP) {
        mItemTextSize = itemTextSize_SP;
        return this;
    }

    /**
     * set item height(item高度)
     */
    public ActionSheetDialog itemHeight(float itemHeight_DP) {
        mItemHeight = itemHeight_DP;
        return this;
    }

    /**
     * 取消按钮背景
     * @param mCancelBgColor
     * @return
     */
    public ActionSheetDialog setmCancelBgColor(int mCancelBgColor) {
        this.mCancelBgColor = mCancelBgColor;
        return this;
    }

    /**
     * set layoutAnimation(设置layout动画 ,传入null将不显示layout动画)
     */
    public ActionSheetDialog layoutAnimation(LayoutAnimationController lac) {
        mLac = lac;
        return this;
    }

    /**
     * set cancel btn text(设置取消按钮内容)
     */
    public ActionSheetDialog cancelText(String cancelText) {
        mCancelText = cancelText;
        return this;
    }

    /**
     * cancel btn text color(取消按钮文字颜色)
     */
    public ActionSheetDialog cancelText(int cancelTextColor) {
        mCancelTextColor = cancelTextColor;
        return this;
    }

    /**
     * cancel btn text size(取消按钮文字大小)
     */
    public ActionSheetDialog cancelTextSize(float cancelTextSize) {
        mCancelTextSize = cancelTextSize;
        return this;
    }

    clreplaced ListDialogAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return mContents.size();
        }

        @Override
        public Object gereplacedem(int position) {
            return null;
        }

        @Override
        public long gereplacedemId(int position) {
            return position;
        }

        @SuppressWarnings("deprecation")
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final DialogMenuItem item = mContents.get(position);
            LinearLayout llItem = new LinearLayout(mContext);
            llItem.setOrientation(LinearLayout.HORIZONTAL);
            llItem.setGravity(Gravity.CENTER_VERTICAL);
            ImageView ivItem = new ImageView(mContext);
            ivItem.setPadding(0, 0, dp2px(15), 0);
            llItem.addView(ivItem);
            TextView tvItem = new TextView(mContext);
            tvItem.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            tvItem.setSingleLine(true);
            tvItem.setGravity(Gravity.CENTER);
            tvItem.setTextColor(mItemTextColor);
            tvItem.setTextSize(TypedValue.COMPLEX_UNIT_SP, mItemTextSize);
            tvItem.setHeight(dp2px(mItemHeight));
            llItem.addView(tvItem);
            float radius = dp2px(mCornerRadius);
            if (mIsreplacedleShow) {
                llItem.setBackgroundDrawable((CornerUtils.lisreplacedemSelector(radius, Color.TRANSPARENT, mItemPressColor, position == mContents.size() - 1)));
            } else {
                llItem.setBackgroundDrawable(CornerUtils.lisreplacedemSelector(radius, Color.TRANSPARENT, mItemPressColor, mContents.size(), position));
            }
            ivItem.setImageResource(item.mResId);
            tvItem.setText(item.mOperName);
            ivItem.setVisibility(item.mResId == 0 ? View.GONE : View.VISIBLE);
            return llItem;
        }
    }
}

18 Source : DrawerMenuActivityConfiguration.java
with GNU General Public License v3.0
from 5GSD

public clreplaced DrawerMenuActivityConfiguration {

    private int mMainLayout;

    private int mDrawerLayoutId;

    private int mLeftDrawerId;

    private int[] mActionMenuItemsToHideWhenDrawerOpen;

    private List<NavDrawerItem> mNavItems;

    private BaseAdapter mBaseAdapter;

    private DrawerMenuActivityConfiguration(Builder pBuilder) {
        mMainLayout = pBuilder.mMainLayout;
        mDrawerLayoutId = pBuilder.mDrawerLayoutId;
        mLeftDrawerId = pBuilder.mLeftDrawerId;
        mActionMenuItemsToHideWhenDrawerOpen = pBuilder.mActionMenuItemsToHideWhenDrawerOpen;
        mNavItems = pBuilder.mNavItems;
        mBaseAdapter = pBuilder.mBaseAdapter;
    }

    public int getMainLayout() {
        return mMainLayout;
    }

    public int getDrawerLayoutId() {
        return mDrawerLayoutId;
    }

    public int getLeftDrawerId() {
        return mLeftDrawerId;
    }

    public int[] getActionMenuItemsToHideWhenDrawerOpen() {
        return mActionMenuItemsToHideWhenDrawerOpen;
    }

    public List<NavDrawerItem> getNavItems() {
        return mNavItems;
    }

    public BaseAdapter getBaseAdapter() {
        return mBaseAdapter;
    }

    public static clreplaced Builder {

        private final Context mContext;

        private int mMainLayout;

        private int mDrawerLayoutId;

        private int mLeftDrawerId;

        private int[] mActionMenuItemsToHideWhenDrawerOpen;

        private List<NavDrawerItem> mNavItems;

        private int mDrawerOpenDesc;

        private int mDrawerCloseDesc;

        private BaseAdapter mBaseAdapter;

        public Builder(Context pContext) {
            mContext = pContext;
        }

        public Builder mainLayout(int pMainLayout) {
            mMainLayout = pMainLayout;
            return this;
        }

        public Builder drawerLayoutId(int pDrawerLayoutId) {
            mDrawerLayoutId = pDrawerLayoutId;
            return this;
        }

        public Builder leftDrawerId(int pLeftDrawerId) {
            mLeftDrawerId = pLeftDrawerId;
            return this;
        }

        public Builder drawerOpenDesc(int pDrawerOpenDesc) {
            mDrawerOpenDesc = pDrawerOpenDesc;
            return this;
        }

        public Builder drawerCloseDesc(int pDrawerCloseDesc) {
            mDrawerCloseDesc = pDrawerCloseDesc;
            return this;
        }

        public DrawerMenuActivityConfiguration build() {
            List<NavDrawerItem> menu = new ArrayList<>();
            // Section Main
            menu.add(DrawerMenuSection.create(DrawerMenu.ID.SECTION_MAIN, mContext.getString(R.string.main)));
            // Phone/SIM Details
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.PHONE_SIM_DETAILS, mContext.getString(R.string.device_info), R.drawable.ic_action_phone, true));
            // Cell Information (Neighboring cells etc)
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.CURRENT_TREAT_LEVEL, mContext.getString(R.string.cell_info_replacedle), R.drawable.cell_tower, true));
            // Database Viewer
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.DB_VIEWER, mContext.getString(R.string.db_viewer), R.drawable.ic_action_storage, true));
            // Antenna Map Viewer
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.ANTENNA_MAP_VIEW, mContext.getString(R.string.map_view), R.drawable.ic_action_map, false));
            // menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.AT_COMMAND_INTERFACE, mContext.getString(R.string.at_command_replacedle), R.drawable.ic_action_computer, true));   // AT Command Interface
            // Section Settings
            menu.add(DrawerMenuSection.create(DrawerMenu.ID.SECTION_DATABASE_SETTINGS, mContext.getString(R.string.database_settings)));
            // Backup Database
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.DATABASE_SETTINGS.BACKUP_DB, mContext.getString(R.string.backup_database), R.drawable.ic_action_import_export, false));
            // Restore Database
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.DATABASE_SETTINGS.RESTORE_DB, mContext.getString(R.string.restore_database), R.drawable.ic_action_import_export, false));
            // Reset Database
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.DATABASE_SETTINGS.RESET_DB, mContext.getString(R.string.clear_database), R.drawable.ic_action_delete_database, false));
            // Section Application
            menu.add(DrawerMenuSection.create(DrawerMenu.ID.SECTION_APPLICATION, mContext.getString(R.string.application)));
            // "Download Local BTS data"
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.DOWNLOAD_LOCAL_BTS_DATA, mContext.getString(R.string.get_opencellid), R.drawable.stat_sys_download_anim0, false));
            // menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.UPLOAD_LOCAL_BTS_DATA, mContext.getString(R.string.upload_bts), R.drawable.stat_sys_upload_anim0, false));      // "Upload Local BTS data"
            // Quit
            menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.QUIT, mContext.getString(R.string.quit), R.drawable.ic_action_remove, false));
            mNavItems = menu;
            if (mMainLayout == 0) {
                this.mainLayout(R.layout.activity_main);
            }
            if (mDrawerLayoutId == 0) {
                this.drawerLayoutId(R.id.drawer_layout);
            }
            if (mLeftDrawerId == 0) {
                this.leftDrawerId(R.id.left_drawer);
            }
            if (mDrawerOpenDesc == 0) {
                this.drawerOpenDesc(R.string.drawer_open);
            }
            if (mDrawerCloseDesc == 0) {
                this.drawerCloseDesc(R.string.drawer_close);
            }
            if (mBaseAdapter == null) {
                mBaseAdapter = new DrawerMenuAdapter(mContext, R.layout.drawer_item, menu);
            }
            return new DrawerMenuActivityConfiguration(this);
        }
    }
}

See More Examples