├── app
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ ├── values
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── arrays.xml
│ │ │ ├── colors.xml
│ │ │ ├── attrs.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── drawable
│ │ │ ├── tick.png
│ │ │ ├── rating.png
│ │ │ ├── ic_clear.xml
│ │ │ └── ic_launcher_background.xml
│ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ ├── layout
│ │ │ ├── settings_activity.xml
│ │ │ ├── list_item.xml
│ │ │ ├── drawer_item.xml
│ │ │ ├── activity_app_chooser.xml
│ │ │ ├── activity_app_drawer.xml
│ │ │ ├── content_app_chooser.xml
│ │ │ └── activity_main.xml
│ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ └── xml
│ │ │ └── root_preferences.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ └── umairayub
│ │ │ └── bitlauncher
│ │ │ ├── model
│ │ │ └── App.java
│ │ │ ├── adapters
│ │ │ └── Adapter.java
│ │ │ ├── listeners
│ │ │ └── OnSwipeTouchListener.java
│ │ │ └── activites
│ │ │ ├── MainActivity.java
│ │ │ ├── AppDrawerActivity.java
│ │ │ ├── SettingsActivity.java
│ │ │ └── AppChooserActivity.java
│ │ └── AndroidManifest.xml
├── proguard-rules.pro
└── build.gradle
├── settings.gradle
├── screenshots
├── screenshot01.png
├── screenshot02.png
└── screenshot03.png
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .idea
├── encodings.xml
├── code-comments.xml
├── vcs.xml
├── misc.xml
├── runConfigurations.xml
├── gradle.xml
├── codeStyles
│ └── Project.xml
└── BitLauncher.time
├── .gitignore
├── LICENSE
├── gradle.properties
├── hs_err_pid1342.log
├── README.md
├── gradlew.bat
└── gradlew
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 16dp
3 |
4 |
--------------------------------------------------------------------------------
/screenshots/screenshot01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/screenshots/screenshot01.png
--------------------------------------------------------------------------------
/screenshots/screenshot02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/screenshots/screenshot02.png
--------------------------------------------------------------------------------
/screenshots/screenshot03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/screenshots/screenshot03.png
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/drawable/tick.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/drawable/rating.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/umairayub79/BitLauncher/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/.idea/code-comments.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/umairayub/bitlauncher/model/App.java:
--------------------------------------------------------------------------------
1 | package umairayub.bitlauncher.model;
2 |
3 | public class App {
4 | public String packageName;
5 | public String Appname;
6 | }
7 |
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Jul 22 02:55:38 PKT 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Reply
5 | - Reply to all
6 |
7 |
8 |
9 | - reply
10 | - reply_all
11 |
12 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #F57C00
6 | #FFFFFF
7 | #111111
8 |
9 | #66000000
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clear.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/settings_activity.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/drawer_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | BitLauncher
3 | AppChooserActivity
4 | Settings
5 |
6 |
7 | Theme
8 | Dark Theme
9 |
10 | Light Theme
11 |
12 | Status Bar
13 | Hide Status bar
14 |
15 | Show Status bar
16 |
17 | AppDrawerActivity
18 | Dummy Button
19 | DUMMY\nCONTENT
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_app_chooser.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_app_drawer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
18 |
19 |
27 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 29
5 | buildToolsVersion "29.0.0"
6 | defaultConfig {
7 | applicationId "umairayub.bitlauncher"
8 | minSdkVersion 20
9 | targetSdkVersion 29
10 | versionCode 12
11 | versionName "1.2"
12 | }
13 | buildTypes {
14 | release {
15 | minifyEnabled false
16 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
17 | }
18 | }
19 | }
20 |
21 | dependencies {
22 | implementation fileTree(dir: 'libs', include: ['*.jar'])
23 | implementation 'androidx.appcompat:appcompat:1.0.2'
24 | implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
25 | implementation 'com.google.android.material:material:1.0.0'
26 | implementation 'com.github.Binary-Finery:JetDB:1.0.5'
27 | implementation 'com.github.Binary-Finery:Bungee:2.0'
28 | implementation 'com.github.umairayub79:MaDialog:1.3'
29 |
30 | implementation 'androidx.preference:preference:1.1.0-rc01'
31 | }
32 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Umair Ayub
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx900m
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app's APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Automatically convert third-party libraries to use AndroidX
19 | android.enableJetifier=true
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/java/umairayub/bitlauncher/adapters/Adapter.java:
--------------------------------------------------------------------------------
1 | package umairayub.bitlauncher.adapters;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.BaseAdapter;
8 |
9 | import android.widget.TextView;
10 |
11 | import java.util.ArrayList;
12 | import java.util.List;
13 |
14 | import umairayub.bitlauncher.R;
15 | import umairayub.bitlauncher.model.App;
16 |
17 | public class Adapter extends BaseAdapter {
18 |
19 | private final Context mContext;
20 | private final List appList;
21 | private ArrayList arraylist;
22 |
23 |
24 | // 1
25 | public Adapter(Context context,List applist) {
26 | this.mContext = context;
27 | this.appList = applist;
28 | }
29 |
30 | // 2
31 | @Override
32 | public int getCount() {
33 | return appList.size();
34 | }
35 |
36 | // 3
37 | @Override
38 | public long getItemId(int position) {
39 | return position;
40 | }
41 |
42 | // 4
43 | @Override
44 | public Object getItem(int position) {
45 | return appList.get(position);
46 | }
47 | @Override
48 | public int getViewTypeCount() {
49 | return 2;
50 | }
51 | // 5
52 | @Override
53 | public View getView(int position, View convertView, ViewGroup parent) {
54 |
55 | if (convertView == null) {
56 | final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
57 | convertView = layoutInflater.inflate(R.layout.list_item, null);
58 | }
59 | final TextView name = (TextView)convertView.findViewById(R.id.tv_item);
60 |
61 | name.setText(appList.get(position).Appname);
62 |
63 | return convertView;
64 |
65 | }
66 |
67 |
68 | }
69 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
12 |
13 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
33 |
34 |
38 |
41 |
42 |
43 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/root_preferences.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
26 |
27 |
33 |
34 |
38 |
42 |
46 |
50 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
19 |
20 |
25 |
26 |
31 |
32 |
36 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/java/umairayub/bitlauncher/listeners/OnSwipeTouchListener.java:
--------------------------------------------------------------------------------
1 | package umairayub.bitlauncher.listeners;
2 |
3 | import android.content.Context;
4 | import android.view.GestureDetector;
5 | import android.view.MotionEvent;
6 | import android.view.View;
7 | import android.widget.Toast;
8 |
9 |
10 | public class OnSwipeTouchListener implements View.OnTouchListener {
11 | private final GestureDetector gestureDetector;
12 |
13 | public OnSwipeTouchListener(Context ctx) {
14 | gestureDetector = new GestureDetector(ctx, new GestureListener(ctx));
15 | }
16 |
17 | @Override
18 | public boolean onTouch(View view, MotionEvent motionEvent) {
19 | return gestureDetector.onTouchEvent(motionEvent);
20 | }
21 |
22 | public void onSwipeLeft() {
23 |
24 | }
25 |
26 | public void onSwipeRight() {
27 |
28 | }
29 |
30 |
31 | private final class GestureListener extends GestureDetector.SimpleOnGestureListener {
32 | private static final int SWIPE_THRESHOLD = 100;
33 | private static final int SWIPE_VELOCITY_THRESHOLD = 100;
34 | private final Context ctx;
35 |
36 | public GestureListener(Context ctx) {
37 | this.ctx = ctx;
38 |
39 | }
40 |
41 | @Override
42 | public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
43 | boolean result = false;
44 | try {
45 | float difffY = e2.getY() - e1.getY();
46 | float diffX = e2.getX() - e1.getX();
47 | if (Math.abs(diffX) > Math.abs(difffY)) {
48 | if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
49 | if (diffX > 0) {
50 | onSwipeRight();
51 | } else {
52 | onSwipeLeft();
53 | }
54 | result = true;
55 | }
56 | }
57 | } catch (Exception e) {
58 | e.printStackTrace();
59 | Toast.makeText(ctx, e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
60 | }
61 | return result;
62 | }
63 | }
64 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/content_app_chooser.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
12 |
13 |
18 |
19 |
26 |
27 |
34 |
35 |
36 |
37 |
38 |
39 |
45 |
46 |
47 |
52 |
53 |
58 |
59 |
--------------------------------------------------------------------------------
/hs_err_pid1342.log:
--------------------------------------------------------------------------------
1 | #
2 | # There is insufficient memory for the Java Runtime Environment to continue.
3 | # Native memory allocation (mmap) failed to map 63438848 bytes for committing reserved memory.
4 | # Possible reasons:
5 | # The system is out of physical RAM or swap space
6 | # In 32 bit mode, the process size limit was hit
7 | # Possible solutions:
8 | # Reduce memory load on the system
9 | # Increase physical memory or swap space
10 | # Check if swap backing store is full
11 | # Use 64 bit Java on a 64 bit OS
12 | # Decrease Java heap size (-Xmx/-Xms)
13 | # Decrease number of Java threads
14 | # Decrease Java thread stack sizes (-Xss)
15 | # Set larger code cache with -XX:ReservedCodeCacheSize=
16 | # This output file may be truncated or incomplete.
17 | #
18 | # Out of Memory Error (os_linux.cpp:2640), pid=1342, tid=0x00007fc734d44700
19 | #
20 | # JRE version: OpenJDK Runtime Environment (8.0_152) (build 1.8.0_152-release-1343-b16-5323222)
21 | # Java VM: OpenJDK 64-Bit Server VM (25.152-b16-5323222 mixed mode linux-amd64 compressed oops)
22 | # Core dump written. Default location: /home/umair/Desktop/BitLauncher/core or core.1342
23 | #
24 |
25 | --------------- T H R E A D ---------------
26 |
27 | Current thread (0x00007fc730073800): VMThread [stack: 0x00007fc734c45000,0x00007fc734d45000] [id=1349]
28 |
29 | Stack: [0x00007fc734c45000,0x00007fc734d45000], sp=0x00007fc734d434e0, free space=1017k
30 | Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
31 | V [libjvm.so+0x9ffc88] VMError::report_and_die()+0x148
32 | V [libjvm.so+0x4ce9aa] report_vm_out_of_memory(char const*, int, unsigned long, VMErrorType, char const*)+0x8a
33 | V [libjvm.so+0x8673d8] os::pd_commit_memory(char*, unsigned long, unsigned long, bool)+0xd8
34 | V [libjvm.so+0x86201f] os::commit_memory(char*, unsigned long, unsigned long, bool)+0x1f
35 | V [libjvm.so+0x8d839b] PSVirtualSpace::expand_by(unsigned long)+0x5b
36 | V [libjvm.so+0x8d8ff0] PSYoungGen::resize_generation(unsigned long, unsigned long)+0xb0
37 | V [libjvm.so+0x8d930b] PSYoungGen::resize(unsigned long, unsigned long)+0x1b
38 | V [libjvm.so+0x8d5a3e] PSScavenge::invoke_no_policy()+0xdce
39 | V [libjvm.so+0x8d61f8] PSScavenge::invoke()+0x38
40 | V [libjvm.so+0x88a7e3] ParallelScavengeHeap::failed_mem_allocate(unsigned long)+0x63
41 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
23 |
24 |
25 |
41 |
42 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BitLauncher
2 | Minimalist launcher for Android
3 |
4 |
5 | ## Screenshots
6 | 
7 | 
8 | 
9 |
10 | # Description
11 | ```
12 |
13 | ✶ Made with minimalism in mind.✶
14 | ✶ Stay focused using the Bitlauncher.✶
15 | ✶ Bit Launcher helps you use your Phone less and live in the moment✶
16 |
17 | Minimal homescreen
18 | Focus on your five most important apps.
19 |
20 | Notified but not distracted
21 | Focus on what is essential. Your important notifications work normally, so you don’t miss anything.
22 |
23 | Truly private
24 | We are not in the business of capturing or selling your data. We don't track any personally identifiable data -- we even allow you to turn off our anonymous analytics.
25 |
26 | Save your battery
27 | Use our true black background to significantly preserve your battery (if your phone has an AMOLED screen).
28 |
29 |
30 | Easy set up
31 | Our guided process helps you get BitLauncher set up in no time.
32 |
33 | We respect your privacy. We don't track personally identifiable data and allow for several ways to make your experience even more private.
34 | ```
35 |
36 |
37 |
38 |
39 | # License
40 | ```
41 | MIT License
42 |
43 | Copyright (c) 2019 Umair Ayub
44 |
45 | Permission is hereby granted, free of charge, to any person obtaining a copy
46 | of this software and associated documentation files (the "Software"), to deal
47 | in the Software without restriction, including without limitation the rights
48 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
49 | copies of the Software, and to permit persons to whom the Software is
50 | furnished to do so, subject to the following conditions:
51 |
52 | The above copyright notice and this permission notice shall be included in all
53 | copies or substantial portions of the Software.
54 |
55 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
56 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
57 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
58 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
59 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
60 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
61 | SOFTWARE.
62 | ```
63 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | xmlns:android
14 |
15 | ^$
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | xmlns:.*
25 |
26 | ^$
27 |
28 |
29 | BY_NAME
30 |
31 |
32 |
33 |
34 |
35 |
36 | .*:id
37 |
38 | http://schemas.android.com/apk/res/android
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | .*:name
48 |
49 | http://schemas.android.com/apk/res/android
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | name
59 |
60 | ^$
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | style
70 |
71 | ^$
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | .*
81 |
82 | ^$
83 |
84 |
85 | BY_NAME
86 |
87 |
88 |
89 |
90 |
91 |
92 | .*
93 |
94 | http://schemas.android.com/apk/res/android
95 |
96 |
97 | ANDROID_ATTRIBUTE_ORDER
98 |
99 |
100 |
101 |
102 |
103 |
104 | .*
105 |
106 | .*
107 |
108 |
109 | BY_NAME
110 |
111 |
112 |
113 |
114 |
115 |
116 |
--------------------------------------------------------------------------------
/app/src/main/java/umairayub/bitlauncher/activites/MainActivity.java:
--------------------------------------------------------------------------------
1 | package umairayub.bitlauncher.activites;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.view.View;
7 | import android.widget.AdapterView;
8 | import android.widget.ListView;
9 | import android.widget.TextView;
10 |
11 | import androidx.appcompat.app.AppCompatActivity;
12 | import androidx.constraintlayout.widget.ConstraintLayout;
13 |
14 |
15 | import java.util.List;
16 |
17 | import spencerstudios.com.bungeelib.Bungee;
18 | import spencerstudios.com.jetdblib.JetDB;
19 | import umairayub.bitlauncher.R;
20 | import umairayub.bitlauncher.adapters.Adapter;
21 | import umairayub.bitlauncher.listeners.OnSwipeTouchListener;
22 | import umairayub.bitlauncher.model.App;
23 |
24 | public class MainActivity extends AppCompatActivity {
25 |
26 | TextView tvSettings;
27 | ListView listView;
28 | List HomeAppList;
29 | MainActivity context = MainActivity.this;
30 | Boolean theme;
31 | Boolean status_bar;
32 | ConstraintLayout root;
33 |
34 | @SuppressLint("ClickableViewAccessibility")
35 | @Override
36 | protected void onCreate(Bundle savedInstanceState) {
37 |
38 | status_bar = JetDB.getBoolean(context, "status", false);
39 | theme = JetDB.getBoolean(context, "theme", false);
40 |
41 | if (status_bar) {
42 | if (theme) {
43 | setTheme(R.style.AppThemeDarkFullScreen);
44 | } else {
45 | setTheme(R.style.AppThemeFullScreen);
46 | }
47 | } else {
48 | if (theme) {
49 | setTheme(R.style.AppThemeDark);
50 | } else {
51 | setTheme(R.style.AppTheme);
52 | }
53 | }
54 |
55 | super.onCreate(savedInstanceState);
56 | setContentView(R.layout.activity_main);
57 |
58 | root = findViewById(R.id.relativeLayout);
59 | tvSettings = findViewById(R.id.tvSettings);
60 | listView = findViewById(R.id.listview);
61 |
62 | listView.setOnTouchListener(new OnSwipeTouchListener(this) {
63 | @Override
64 | public void onSwipeLeft() {
65 | super.onSwipeLeft();
66 | Intent i = new Intent(context, AppDrawerActivity.class);
67 | startActivity(i);
68 | Bungee.slideLeft(context);
69 | }
70 | });
71 | tvSettings.setOnClickListener(new View.OnClickListener() {
72 | @Override
73 | public void onClick(View view) {
74 | Intent intent = new Intent(context, SettingsActivity.class);
75 | startActivity(intent);
76 | finish();
77 | }
78 | });
79 | listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
80 | @Override
81 | public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
82 | // Getting the package name from HomeAppList
83 | String packageName = HomeAppList.get(i).packageName;
84 |
85 | //Getting the launch intent for the package
86 | Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
87 | if (intent != null) {
88 | //launching the activity if intent is not null
89 | startActivity(intent);
90 | }
91 | }
92 | });
93 | }
94 |
95 | @Override
96 | protected void onResume() {
97 | super.onResume();
98 |
99 | //Getting the List of user selected apps from SharedPrefs using JetDB
100 | HomeAppList = JetDB.getListOfObjects(context, App.class, "apps");
101 | //checking if HomeAppList is empty then launching the app chooser activity
102 | if (HomeAppList.isEmpty()) {
103 | Intent i = new Intent(context, AppChooserActivity.class);
104 | startActivity(i);
105 | }
106 | // if HomeAppList is not empty then create adapter and show the app list
107 | Adapter adapter = new Adapter(context, HomeAppList);
108 | listView.setAdapter(adapter);
109 |
110 | }
111 |
112 | @Override
113 | public void onBackPressed() {
114 | // Do nothing
115 | }
116 |
117 |
118 | }
119 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Attempt to set APP_HOME
10 | # Resolve links: $0 may be a link
11 | PRG="$0"
12 | # Need this for relative symlinks.
13 | while [ -h "$PRG" ] ; do
14 | ls=`ls -ld "$PRG"`
15 | link=`expr "$ls" : '.*-> \(.*\)$'`
16 | if expr "$link" : '/.*' > /dev/null; then
17 | PRG="$link"
18 | else
19 | PRG=`dirname "$PRG"`"/$link"
20 | fi
21 | done
22 | SAVED="`pwd`"
23 | cd "`dirname \"$PRG\"`/" >/dev/null
24 | APP_HOME="`pwd -P`"
25 | cd "$SAVED" >/dev/null
26 |
27 | APP_NAME="Gradle"
28 | APP_BASE_NAME=`basename "$0"`
29 |
30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31 | DEFAULT_JVM_OPTS=""
32 |
33 | # Use the maximum available, or set MAX_FD != -1 to use that value.
34 | MAX_FD="maximum"
35 |
36 | warn () {
37 | echo "$*"
38 | }
39 |
40 | die () {
41 | echo
42 | echo "$*"
43 | echo
44 | exit 1
45 | }
46 |
47 | # OS specific support (must be 'true' or 'false').
48 | cygwin=false
49 | msys=false
50 | darwin=false
51 | nonstop=false
52 | case "`uname`" in
53 | CYGWIN* )
54 | cygwin=true
55 | ;;
56 | Darwin* )
57 | darwin=true
58 | ;;
59 | MINGW* )
60 | msys=true
61 | ;;
62 | NONSTOP* )
63 | nonstop=true
64 | ;;
65 | esac
66 |
67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68 |
69 | # Determine the Java command to use to start the JVM.
70 | if [ -n "$JAVA_HOME" ] ; then
71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72 | # IBM's JDK on AIX uses strange locations for the executables
73 | JAVACMD="$JAVA_HOME/jre/sh/java"
74 | else
75 | JAVACMD="$JAVA_HOME/bin/java"
76 | fi
77 | if [ ! -x "$JAVACMD" ] ; then
78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79 |
80 | Please set the JAVA_HOME variable in your environment to match the
81 | location of your Java installation."
82 | fi
83 | else
84 | JAVACMD="java"
85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86 |
87 | Please set the JAVA_HOME variable in your environment to match the
88 | location of your Java installation."
89 | fi
90 |
91 | # Increase the maximum file descriptors if we can.
92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93 | MAX_FD_LIMIT=`ulimit -H -n`
94 | if [ $? -eq 0 ] ; then
95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96 | MAX_FD="$MAX_FD_LIMIT"
97 | fi
98 | ulimit -n $MAX_FD
99 | if [ $? -ne 0 ] ; then
100 | warn "Could not set maximum file descriptor limit: $MAX_FD"
101 | fi
102 | else
103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104 | fi
105 | fi
106 |
107 | # For Darwin, add options to specify how the application appears in the dock
108 | if $darwin; then
109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110 | fi
111 |
112 | # For Cygwin, switch paths to Windows format before running java
113 | if $cygwin ; then
114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116 | JAVACMD=`cygpath --unix "$JAVACMD"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Escape application args
158 | save () {
159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160 | echo " "
161 | }
162 | APP_ARGS=$(save "$@")
163 |
164 | # Collect all arguments for the java command, following the shell quoting and substitution rules
165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166 |
167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169 | cd "$(dirname "$0")"
170 | fi
171 |
172 | exec "$JAVACMD" "$@"
173 |
--------------------------------------------------------------------------------
/app/src/main/java/umairayub/bitlauncher/activites/AppDrawerActivity.java:
--------------------------------------------------------------------------------
1 | package umairayub.bitlauncher.activites;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.content.Context;
5 | import android.content.Intent;
6 | import android.content.pm.PackageManager;
7 | import android.content.pm.ResolveInfo;
8 | import android.os.Bundle;
9 | import android.text.Editable;
10 | import android.text.TextWatcher;
11 | import android.view.View;
12 | import android.view.ViewGroup;
13 | import android.widget.AdapterView;
14 | import android.widget.ArrayAdapter;
15 | import android.widget.EditText;
16 | import android.widget.ListView;
17 | import android.widget.TextView;
18 | import android.widget.Toast;
19 |
20 | import androidx.appcompat.app.AppCompatActivity;
21 |
22 | import java.util.ArrayList;
23 | import java.util.Collections;
24 | import java.util.List;
25 |
26 | import spencerstudios.com.bungeelib.Bungee;
27 | import spencerstudios.com.jetdblib.JetDB;
28 | import umairayub.bitlauncher.R;
29 | import umairayub.bitlauncher.listeners.OnSwipeTouchListener;
30 |
31 | public class AppDrawerActivity extends AppCompatActivity {
32 |
33 | Boolean status_bar;
34 | Boolean theme;
35 | private List packageNames = new ArrayList<>();
36 | private List appNamesPosition = new ArrayList<>();
37 | private ArrayAdapter adapter;
38 | private ListView listView;
39 | private Context context = AppDrawerActivity.this;
40 |
41 | @Override
42 | protected void onResume() {
43 | super.onResume();
44 | if (getActivities(getPackageManager()).size() - 1 != packageNames.size()) {
45 | fetchAppList();
46 | }
47 | }
48 |
49 | @Override
50 | protected void onCreate(Bundle savedInstanceState) {
51 | status_bar = JetDB.getBoolean(context, "status", false);
52 | theme = JetDB.getBoolean(context, "theme", false);
53 |
54 | if (status_bar) {
55 | if (theme) {
56 | setTheme(R.style.AppThemeDarkFullScreen);
57 | } else {
58 | setTheme(R.style.AppThemeFullScreen);
59 | }
60 | } else {
61 | if (theme) {
62 | setTheme(R.style.AppThemeDark);
63 | } else {
64 | setTheme(R.style.AppTheme);
65 | }
66 | }
67 | super.onCreate(savedInstanceState);
68 | setContentView(R.layout.activity_app_drawer);
69 |
70 | EditText editTextFilter = findViewById(R.id.searchFilter);
71 |
72 | adapter = createNewAdapter();
73 | listView = findViewById(R.id.listViewAllApps_d);
74 | listView.setAdapter(adapter);
75 | fetchAppList();
76 |
77 | editTextFilter.addTextChangedListener(new TextWatcher() {
78 | @Override
79 | public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
80 |
81 | }
82 |
83 | @Override
84 | public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
85 | adapter.getFilter().filter(charSequence);
86 | }
87 |
88 | @Override
89 | public void afterTextChanged(Editable editable) {
90 |
91 | }
92 | });
93 |
94 | }
95 |
96 | private ArrayAdapter createNewAdapter() {
97 | return new ArrayAdapter(this, R.layout.drawer_item, new ArrayList()) {
98 | @Override
99 | public View getView(int position, View convertView, ViewGroup parent) {
100 | TextView view = (TextView) super.getView(position, convertView, parent);
101 | return view;
102 | }
103 | };
104 | }
105 |
106 | private void fetchAppList() {
107 | packageNames.clear();
108 | adapter.clear();
109 | for (ResolveInfo resolver : getActivities(getPackageManager())) {
110 | String appName = (String) resolver.loadLabel(getPackageManager());
111 | if (appName.equals("BitLauncher"))
112 | continue;
113 | adapter.add(appName);
114 | appNamesPosition.add(appName);
115 | packageNames.add(resolver.activityInfo.packageName);
116 | }
117 | setActions();
118 | }
119 |
120 | private List getActivities(PackageManager packageManager) {
121 | Intent intent = new Intent(Intent.ACTION_MAIN, null).addCategory(Intent.CATEGORY_LAUNCHER);
122 | List activities = packageManager.queryIntentActivities(intent, 0);
123 | Collections.sort(activities, new ResolveInfo.DisplayNameComparator(packageManager));
124 | return activities;
125 | }
126 |
127 | private void setActions() {
128 | onClickHandler();
129 | onSwipeHandler();
130 | }
131 |
132 | private void onClickHandler() {
133 | listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
134 | @Override
135 | public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
136 | String appName = adapterView.getItemAtPosition(i).toString();
137 | String packageName = packageNames.get(appNamesPosition.indexOf(appName));
138 | try {
139 | startActivity(getPackageManager().getLaunchIntentForPackage(packageName));
140 | } catch (Exception e) {
141 | e.printStackTrace();
142 | Toast.makeText(context, e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
143 | }
144 | }
145 | });
146 | }
147 |
148 | @SuppressLint("ClickableViewAccessibility")
149 | private void onSwipeHandler() {
150 | listView.setOnTouchListener(new OnSwipeTouchListener(context) {
151 | @Override
152 | public void onSwipeRight() {
153 | super.onSwipeRight();
154 | onBackPressed();
155 | }
156 | });
157 | }
158 |
159 | @Override
160 | public void onBackPressed() {
161 | super.onBackPressed();
162 | Bungee.slideRight(context);
163 | }
164 |
165 | }
166 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
55 |
60 |
65 |
70 |
75 |
80 |
85 |
90 |
95 |
100 |
105 |
110 |
115 |
120 |
125 |
130 |
135 |
140 |
145 |
150 |
155 |
160 |
165 |
170 |
171 |
--------------------------------------------------------------------------------
/app/src/main/java/umairayub/bitlauncher/activites/SettingsActivity.java:
--------------------------------------------------------------------------------
1 | package umairayub.bitlauncher.activites;
2 |
3 | import android.content.Intent;
4 | import android.net.Uri;
5 | import android.os.Bundle;
6 | import android.provider.Settings;
7 | import android.widget.LinearLayout;
8 |
9 | import androidx.appcompat.app.AppCompatActivity;
10 | import androidx.preference.Preference;
11 | import androidx.preference.PreferenceFragmentCompat;
12 |
13 | import spencerstudios.com.jetdblib.JetDB;
14 | import umairayub.bitlauncher.R;
15 | import umairayub.madialog.MaDialog;
16 | import umairayub.madialog.MaDialogListener;
17 |
18 | public class SettingsActivity extends AppCompatActivity {
19 |
20 | Boolean status_bar;
21 | Boolean theme;
22 | SettingsActivity context = SettingsActivity.this;
23 |
24 | @Override
25 | protected void onCreate(Bundle savedInstanceState) {
26 | status_bar = JetDB.getBoolean(context, "status", false);
27 | theme = JetDB.getBoolean(context, "theme", false);
28 |
29 | if (status_bar) {
30 | if (theme) {
31 | setTheme(R.style.AppThemeDarkFullScreen);
32 | } else {
33 | setTheme(R.style.AppThemeFullScreen);
34 | }
35 | } else {
36 | if (theme) {
37 | setTheme(R.style.AppThemeDark);
38 | } else {
39 | setTheme(R.style.AppTheme);
40 | }
41 | }
42 | super.onCreate(savedInstanceState);
43 | setContentView(R.layout.settings_activity);
44 |
45 | getSupportFragmentManager()
46 | .beginTransaction()
47 | .replace(R.id.settings, new SettingsFragment())
48 | .commit();
49 |
50 |
51 | }
52 |
53 | @Override
54 | public void onBackPressed() {
55 | Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
56 | startActivity(intent);
57 | super.onBackPressed();
58 | }
59 |
60 | public static class SettingsFragment extends PreferenceFragmentCompat {
61 | @Override
62 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
63 | setPreferencesFromResource(R.xml.root_preferences, rootKey);
64 |
65 | Preference theme = findPreference("theme");
66 | if (theme != null) {
67 | theme.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
68 | @Override
69 | public boolean onPreferenceClick(Preference preference) {
70 | getActivity().recreate();
71 | return true;
72 | }
73 | });
74 | }
75 | Preference statusBar = findPreference("status");
76 | if (statusBar != null) {
77 | statusBar.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
78 | @Override
79 | public boolean onPreferenceClick(Preference preference) {
80 | getActivity().recreate();
81 | return true;
82 | }
83 | });
84 | }
85 |
86 | Preference sysSettings = findPreference("sysSettings");
87 | if (sysSettings != null) {
88 | sysSettings.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
89 | @Override
90 | public boolean onPreferenceClick(Preference preference) {
91 | startActivity(new Intent(Settings.ACTION_SETTINGS));
92 | return true;
93 | }
94 | });
95 | }
96 | Preference launcherSettings = findPreference("launcherSettings");
97 | if (launcherSettings != null) {
98 | launcherSettings.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
99 | @Override
100 | public boolean onPreferenceClick(Preference preference) {
101 | startActivity(new Intent(Settings.ACTION_HOME_SETTINGS));
102 | return true;
103 | }
104 | });
105 | }
106 | Preference appChooser = findPreference("appchooser");
107 | if (appChooser != null) {
108 | appChooser.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
109 | @Override
110 | public boolean onPreferenceClick(Preference preference) {
111 | Intent intent = new Intent(getContext(), AppChooserActivity.class);
112 | startActivity(intent);
113 | return true;
114 | }
115 | });
116 | }
117 | Preference Rate_us = findPreference("rate_us");
118 | if (Rate_us != null) {
119 | Rate_us.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
120 | @Override
121 | public boolean onPreferenceClick(Preference preference) {
122 | new MaDialog.Builder(getContext())
123 | .setImage(R.drawable.rating)
124 | .setBackgroundColor(R.color.colorWhite)
125 | .setTitleTextColor(R.color.colorBlack)
126 | .setMessageTextColor(R.color.colorBlack)
127 | .setTitle("Rate BitLauncher")
128 | .setMessage("Tell others what you think about this app")
129 | .setButtonOrientation(LinearLayout.VERTICAL)
130 | .AddNewButton(R.style.btnTheme, "Sure", new MaDialogListener() {
131 | @Override
132 | public void onClick() {
133 | try {
134 | startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getContext().getPackageName())));
135 | } catch (android.content.ActivityNotFoundException e) {
136 | e.printStackTrace();
137 | startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + getContext().getPackageName())));
138 | }
139 | }
140 | })
141 | .AddNewButton(R.style.btnTheme, "I don't want to", new MaDialogListener() {
142 | @Override
143 | public void onClick() {
144 |
145 | }
146 | })
147 | .build();
148 | return true;
149 | }
150 | });
151 | }
152 | Preference feedback = findPreference("feedback");
153 | if (feedback != null) {
154 | feedback.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
155 | @Override
156 | public boolean onPreferenceClick(Preference preference) {
157 |
158 | Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
159 | emailIntent.setData(Uri.parse("mailto:umairayub79@gmail.com"));
160 | emailIntent.putExtra(Intent.EXTRA_SUBJECT, "BitLauncher Feedback");
161 | startActivity(Intent.createChooser(emailIntent, "Send Feedback!"));
162 |
163 | return true;
164 | }
165 | });
166 | }
167 |
168 | }
169 |
170 | }
171 | }
--------------------------------------------------------------------------------
/app/src/main/java/umairayub/bitlauncher/activites/AppChooserActivity.java:
--------------------------------------------------------------------------------
1 | package umairayub.bitlauncher.activites;
2 |
3 | import android.content.Intent;
4 | import android.content.pm.ApplicationInfo;
5 | import android.content.pm.PackageManager;
6 | import android.graphics.Color;
7 | import android.os.AsyncTask;
8 | import android.os.Bundle;
9 | import android.util.Log;
10 | import android.view.View;
11 | import android.widget.AdapterView;
12 | import android.widget.ListView;
13 | import android.widget.ProgressBar;
14 |
15 | import androidx.appcompat.app.AppCompatActivity;
16 |
17 | import com.google.android.material.chip.Chip;
18 | import com.google.android.material.chip.ChipGroup;
19 | import com.google.android.material.floatingactionbutton.FloatingActionButton;
20 |
21 | import java.util.ArrayList;
22 | import java.util.Collections;
23 | import java.util.Comparator;
24 | import java.util.List;
25 |
26 | import spencerstudios.com.jetdblib.JetDB;
27 | import umairayub.bitlauncher.R;
28 | import umairayub.bitlauncher.adapters.Adapter;
29 | import umairayub.bitlauncher.model.App;
30 | import umairayub.madialog.MaDialog;
31 | import umairayub.madialog.MaDialogListener;
32 |
33 | //this is a one time activity to select apps for home screen
34 | //this activity can be launched from settings again if needed
35 |
36 | public class AppChooserActivity extends AppCompatActivity {
37 |
38 | // Declearing vars/views;
39 | ListView Listview;
40 | ProgressBar progressBar;
41 | Adapter adapter;
42 | ArrayList apps = new ArrayList<>();
43 | List SelectedApps = new ArrayList<>();
44 | AppChooserActivity context = AppChooserActivity.this;
45 | ChipGroup mChipsGroup;
46 | Boolean status_bar;
47 | Boolean theme;
48 |
49 | @Override
50 | protected void onCreate(Bundle savedInstanceState) {
51 | status_bar = JetDB.getBoolean(context, "status", false);
52 | theme = JetDB.getBoolean(context, "theme", false);
53 |
54 | if (status_bar) {
55 | if (theme) {
56 | setTheme(R.style.AppThemeDarkFullScreen);
57 | } else {
58 | setTheme(R.style.AppThemeFullScreen);
59 | }
60 | } else {
61 | if (theme) {
62 | setTheme(R.style.AppThemeDark);
63 | } else {
64 | setTheme(R.style.AppTheme);
65 | }
66 | }
67 | super.onCreate(savedInstanceState);
68 | setContentView(R.layout.activity_app_chooser);
69 |
70 | //Inintializing views
71 | Listview = findViewById(R.id.listViewAllApps);
72 | progressBar = findViewById(R.id.progressBar);
73 | mChipsGroup = findViewById(R.id.chipGroup);
74 | FloatingActionButton fab = findViewById(R.id.fab);
75 |
76 |
77 | fab.setOnClickListener(new View.OnClickListener() {
78 | @Override
79 | public void onClick(View view) {
80 | if (!SelectedApps.isEmpty()) {
81 | //Saving user selected apps in sharedPrefs with JetDB
82 | JetDB.putListOfObjects(context, SelectedApps, "apps");
83 | //Finishing this activity
84 | finish();
85 | } else {
86 | new MaDialog.Builder(context)
87 | .setTitle("Oops!")
88 | .setMessage("You can't leave without selecting any apps")
89 | .setPositiveButtonText("Ok, Let me select some apps")
90 | .setPositiveButtonListener(new MaDialogListener() {
91 | @Override
92 | public void onClick() {
93 |
94 | }
95 | })
96 | .build();
97 | }
98 | }
99 | });
100 |
101 | new LoadApps().execute();
102 | Listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
103 | @Override
104 | public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
105 | // getting the app's name from apps array of object at position i
106 | String AppName = apps.get(i).Appname;
107 | Log.i("Settings", apps.get(i).packageName);
108 | //Making sure users select 7 apps Only
109 | if (SelectedApps.size() < 7) {
110 | //Making a app object
111 | final App app = apps.get(i);
112 | //adding the app object in SelectedApps Array
113 | SelectedApps.add(app);
114 |
115 | //Making a Chip
116 | final Chip chip = new Chip(context);
117 | chip.setText(AppName);
118 | chip.setCloseIconResource(R.drawable.ic_clear);
119 | chip.setCloseIconEnabled(true);
120 | chip.setCloseIconTintResource(R.color.colorWhite);
121 | chip.setPadding(2, 2, 2, 2);
122 | chip.setTextColor(Color.WHITE);
123 | chip.setChipBackgroundColorResource(R.color.colorAccent);
124 | chip.setOnCloseIconClickListener(new View.OnClickListener() {
125 | @Override
126 | public void onClick(View view) {
127 | // removing the chip
128 | mChipsGroup.removeView(chip);
129 | // removing the app from Arraylist
130 | SelectedApps.remove(app);
131 | //re adding the app to apps array
132 | apps.add(app);
133 | //Sorting the apps array again
134 | Collections.sort(apps, new Comparator() {
135 | @Override
136 | public int compare(App item, App t1) {
137 | return item.Appname.toLowerCase().compareTo(t1.Appname.toLowerCase());
138 | }
139 | });
140 |
141 | adapter.notifyDataSetChanged();
142 |
143 | }
144 | });
145 | // adding chip to chipsGroup
146 | mChipsGroup.addView(chip);
147 | //we remove the selected apps from apps array
148 | apps.remove(i);
149 | adapter.notifyDataSetChanged();
150 |
151 | // showing a dialog if user tries to selected more than 7 apps
152 | } else {
153 | new MaDialog.Builder(context)
154 | .setTitle("Oops")
155 | .setMessage("You can't select more then 7 apps")
156 | .setPositiveButtonText("Oh, Okay")
157 | .setPositiveButtonListener(new MaDialogListener() {
158 | @Override
159 | public void onClick() {
160 |
161 | }
162 | })
163 | .build();
164 | }
165 |
166 |
167 | }
168 | });
169 |
170 | }
171 |
172 |
173 | public class LoadApps extends AsyncTask> {
174 |
175 | PackageManager packageManager = getPackageManager();
176 |
177 | @Override
178 | protected void onPreExecute() {
179 | super.onPreExecute();
180 | }
181 |
182 | @Override
183 | protected List doInBackground(Integer... integers) {
184 | if (!apps.isEmpty()) {
185 | apps.clear();
186 | }
187 | Intent i = new Intent(Intent.ACTION_MAIN, null);
188 | i.addCategory(Intent.CATEGORY_LAUNCHER);
189 | List applications = getPackageManager().getInstalledApplications(0);
190 | for (ApplicationInfo application : applications) {
191 | if (packageManager.getLaunchIntentForPackage(application.packageName) != null) {
192 | //Skipping Bit Launcher from apps list
193 | if (application.packageName.equals("umairayub.bitlauncher")) {
194 | continue;
195 | }
196 |
197 | App app = new App();
198 | app.Appname = application.loadLabel(packageManager).toString();
199 | app.packageName = application.packageName;
200 | apps.add(app);
201 |
202 | }
203 | }
204 | return apps;
205 | }
206 |
207 | @Override
208 | protected void onPostExecute(List items) {
209 | progressBar.setVisibility(View.GONE);
210 | Listview.setVisibility(View.VISIBLE);
211 | adapter = new Adapter(context, items);
212 | Collections.sort(items, new Comparator() {
213 | @Override
214 | public int compare(App item, App t1) {
215 | return item.Appname.toLowerCase().compareTo(t1.Appname.toLowerCase());
216 | }
217 | });
218 | Listview.setAdapter(adapter);
219 |
220 | SelectedApps = JetDB.getListOfObjects(context, App.class, "apps");
221 | if (!SelectedApps.isEmpty()){
222 | for (int i = 0; i < SelectedApps.size(); i++){
223 | final App app = SelectedApps.get(i);
224 | //Making a Chip
225 | final Chip chip = new Chip(context);
226 | chip.setText(app.Appname);
227 | chip.setCloseIconResource(R.drawable.ic_clear);
228 | chip.setCloseIconEnabled(true);
229 | chip.setCloseIconTintResource(R.color.colorWhite);
230 | chip.setPadding(2, 2, 2, 2);
231 | chip.setTextColor(Color.WHITE);
232 | chip.setChipBackgroundColorResource(R.color.colorAccent);
233 | chip.setOnCloseIconClickListener(new View.OnClickListener() {
234 | @Override
235 | public void onClick(View view) {
236 | // removing the chip
237 | mChipsGroup.removeView(chip);
238 | // removing the app from Arraylist
239 | SelectedApps.remove(app);
240 | }
241 | });
242 | // adding chip to chipsGroup
243 | mChipsGroup.addView(chip);
244 |
245 | }
246 | }
247 | super.onPostExecute(items);
248 | }
249 | }
250 | }
251 |
--------------------------------------------------------------------------------
/.idea/BitLauncher.time:
--------------------------------------------------------------------------------
1 | "2019-07-22 02:55:38:851",0
2 | "2019-07-22 02:56:29:312",48000
3 | "2019-07-22 02:57:58:648",9000
4 | "2019-07-22 02:58:02:387",0
5 | "2019-07-22 02:58:10:679",6000
6 | "2019-07-22 02:58:14:153",2000
7 | "2019-07-22 02:59:42:601",87000
8 | "2019-07-22 02:59:43:399",0
9 | "2019-07-22 03:00:50:563",3000
10 | "2019-07-22 03:14:15:388",711000
11 | "2019-07-22 19:14:11:473",473000
12 | "2019-07-22 19:18:30:011",235000
13 | "2019-07-22 19:23:45:540",312000
14 | "2019-07-22 19:23:55:111",6000
15 | "2019-07-22 19:24:00:050",0
16 | "2019-07-22 19:24:08:024",7000
17 | "2019-07-22 19:24:08:279",0
18 | "2019-07-22 19:30:29:789",339000
19 | "2019-07-22 19:32:40:622",54000
20 | "2019-07-22 19:32:55:032",0
21 | "2019-07-22 19:33:07:707",12000
22 | "2019-07-22 19:41:59:088",459000
23 | "2019-07-22 19:42:55:117",48000
24 | "2019-07-22 19:48:55:611",20000
25 | "2019-07-22 19:52:35:048",210000
26 | "2019-07-22 19:58:30:866",317000
27 | "2019-07-23 10:33:46:093",677000
28 | "2019-07-23 10:38:48:807",295000
29 | "2019-07-23 10:44:18:426",300000
30 | "2019-07-23 10:48:32:050",126000
31 | "2019-07-23 10:52:51:870",1000
32 | "2019-07-23 10:53:12:285",17000
33 | "2019-07-23 10:54:53:013",76000
34 | "2019-07-23 10:54:54:809",0
35 | "2019-07-23 10:55:08:193",9000
36 | "2019-07-23 10:55:12:516",0
37 | "2019-07-23 10:55:27:877",11000
38 | "2019-07-23 10:55:42:343",0
39 | "2019-07-23 11:07:11:255",687000
40 | "2019-07-23 11:08:30:249",44000
41 | "2019-07-23 11:10:03:955",60000
42 | "2019-07-23 11:11:13:219",37000
43 | "2019-07-23 11:14:56:127",34000
44 | "2019-07-23 11:15:04:379",0
45 | "2019-07-23 20:47:14:259",300000
46 | "2019-07-23 20:52:41:772",181000
47 | "2019-07-23 20:52:53:929",11000
48 | "2019-07-23 20:53:13:722",0
49 | "2019-07-23 20:55:03:450",110000
50 | "2019-07-23 20:55:10:675",1000
51 | "2019-07-23 20:55:35:047",24000
52 | "2019-07-23 20:55:43:786",4000
53 | "2019-07-23 20:55:47:980",1000
54 | "2019-07-23 20:56:08:090",19000
55 | "2019-07-23 21:03:44:508",410000
56 | "2019-07-23 21:03:46:972",0
57 | "2019-07-23 21:17:52:067",793000
58 | "2019-07-23 21:22:42:176",106000
59 | "2019-07-23 21:22:51:295",2000
60 | "2019-07-23 21:28:41:386",36000
61 | "2019-07-23 21:31:06:101",107000
62 | "2019-07-23 21:31:21:489",2000
63 | "2019-07-23 21:31:45:689",2000
64 | "2019-07-23 21:36:03:038",197000
65 | "2019-07-23 21:36:19:780",0
66 | "2019-07-24 00:20:19:495",101000
67 | "2019-07-24 00:20:37:023",13000
68 | "2019-07-24 00:20:53:645",14000
69 | "2019-07-24 00:24:13:040",170000
70 | "2019-07-24 00:36:33:008",735000
71 | "2019-07-24 00:45:56:657",554000
72 | "2019-07-24 00:48:23:003",0
73 | "2019-07-24 06:03:14:445",477000
74 | "2019-07-24 06:03:47:158",27000
75 | "2019-07-24 06:16:55:615",781000
76 | "2019-07-24 06:17:20:662",23000
77 | "2019-07-24 06:17:21:493",1000
78 | "2019-07-24 06:17:23:657",0
79 | "2019-07-24 06:19:26:071",1000
80 | "2019-07-24 06:19:28:412",0
81 | "2019-07-24 06:20:19:038",49000
82 | "2019-07-24 06:39:51:623",997000
83 | "2019-07-24 06:44:21:165",0
84 | "2019-07-24 12:17:16:446",21000
85 | "2019-07-24 12:17:45:724",6000
86 | "2019-07-24 12:18:37:549",2000
87 | "2019-07-24 12:26:39:409",480000
88 | "2019-07-24 12:28:21:691",70000
89 | "2019-07-24 12:29:37:740",73000
90 | "2019-07-24 18:55:55:660",268000
91 | "2019-07-24 19:00:49:881",289000
92 | "2019-07-24 19:01:32:311",33000
93 | "2019-07-24 19:03:03:650",70000
94 | "2019-07-24 19:04:35:719",86000
95 | "2019-07-24 19:20:25:620",944000
96 | "2019-07-24 19:26:56:706",300000
97 | "2019-07-24 19:42:38:768",0
98 | "2019-07-24 19:55:23:826",61000
99 | "2019-07-24 20:00:45:183",314000
100 | "2019-07-24 20:21:22:682",1227000
101 | "2019-07-24 20:30:55:327",558000
102 | "2019-07-24 20:31:10:758",0
103 | "2019-07-24 21:08:44:497",560000
104 | "2019-07-24 21:15:17:258",348000
105 | "2019-07-24 21:16:09:999",29000
106 | "2019-07-24 21:16:11:476",0
107 | "2019-07-25 00:12:55:054",686000
108 | "2019-07-25 00:19:40:553",319000
109 | "2019-07-25 00:27:27:146",451000
110 | "2019-07-25 00:30:09:958",0
111 | "2019-07-25 00:41:05:339",650000
112 | "2019-07-25 00:42:12:481",11000
113 | "2019-07-25 00:48:18:354",263000
114 | "2019-07-25 01:08:32:978",51000
115 | "2019-07-25 01:24:07:754",923000
116 | "2019-07-25 01:34:38:059",0
117 | "2019-07-25 01:37:20:581",139000
118 | "2019-07-25 01:37:27:144",2000
119 | "2019-07-25 01:37:39:646",0
120 | "2019-07-25 01:38:37:433",2000
121 | "2019-07-25 06:20:10:182",450000
122 | "2019-07-25 06:20:13:045",0
123 | "2019-07-25 06:25:14:289",300000
124 | "2019-07-25 06:26:16:660",0
125 | "2019-07-25 06:31:19:759",300000
126 | "2019-07-25 06:37:18:456",0
127 | "2019-07-25 06:42:32:691",300000
128 | "2019-07-25 07:00:21:575",705000
129 | "2019-07-25 11:25:58:871",430000
130 | "2019-07-25 11:31:35:207",0
131 | "2019-07-25 11:41:50:304",614000
132 | "2019-07-25 11:43:31:857",67000
133 | "2019-07-25 11:43:38:575",2000
134 | "2019-07-25 11:48:09:475",60000
135 | "2019-07-25 11:52:21:177",6000
136 | "2019-07-25 11:52:24:522",0
137 | "2019-07-25 11:52:28:911",0
138 | "2019-07-25 11:53:14:619",45000
139 | "2019-07-25 11:55:00:748",60000
140 | "2019-07-25 12:00:15:465",307000
141 | "2019-07-25 12:00:33:319",0
142 | "2019-07-25 12:00:33:909",1000
143 | "2019-07-25 12:01:01:879",15000
144 | "2019-07-25 12:01:32:130",6000
145 | "2019-07-25 12:01:51:373",10000
146 | "2019-07-25 12:10:54:754",224000
147 | "2019-07-25 12:32:41:806",216000
148 | "2019-07-25 12:33:22:568",0
149 | "2019-07-25 19:17:14:858",349000
150 | "2019-07-25 19:24:32:993",174000
151 | "2019-07-25 19:40:41:156",101000
152 | "2019-07-25 19:45:47:278",300000
153 | "2019-07-25 19:55:36:076",318000
154 | "2019-07-25 19:55:55:292",5000
155 | "2019-07-25 20:00:03:406",224000
156 | "2019-07-25 20:00:12:475",5000
157 | "2019-07-25 20:00:37:225",0
158 | "2019-07-25 20:00:45:194",5000
159 | "2019-07-25 20:00:51:297",1000
160 | "2019-07-25 20:06:55:034",333000
161 | "2019-07-25 20:19:43:913",304000
162 | "2019-07-25 20:28:07:342",350000
163 | "2019-07-25 20:34:08:619",0
164 | "2019-07-26 01:07:37:963",174000
165 | "2019-07-26 01:10:00:594",1000
166 | "2019-07-26 01:13:31:423",201000
167 | "2019-07-26 01:13:51:556",0
168 | "2019-07-26 01:13:57:752",0
169 | "2019-07-26 01:15:35:804",98000
170 | "2019-07-26 01:17:15:138",93000
171 | "2019-07-26 01:37:15:788",1174000
172 | "2019-07-26 01:37:20:387",0
173 | "2019-07-26 01:37:35:616",12000
174 | "2019-07-26 01:39:10:859",0
175 | "2019-07-26 01:47:29:070",494000
176 | "2019-07-26 01:49:01:990",61000
177 | "2019-07-26 01:49:09:494",1000
178 | "2019-07-26 01:49:19:254",5000
179 | "2019-07-26 01:50:00:562",5000
180 | "2019-07-26 01:50:47:363",35000
181 | "2019-07-26 01:51:41:046",15000
182 | "2019-07-26 01:52:40:284",34000
183 | "2019-07-26 01:55:02:889",6000
184 | "2019-07-26 01:56:05:107",15000
185 | "2019-07-26 01:57:46:610",80000
186 | "2019-07-26 01:58:54:381",8000
187 | "2019-07-26 02:05:19:373",265000
188 | "2019-07-26 15:00:39:897",584000
189 | "2019-07-26 15:02:08:527",77000
190 | "2019-07-26 15:16:53:146",877000
191 | "2019-07-26 15:20:24:442",125000
192 | "2019-07-26 15:23:31:006",25000
193 | "2019-07-26 15:24:43:938",65000
194 | "2019-07-26 15:25:48:983",19000
195 | "2019-07-26 15:26:30:042",20000
196 | "2019-07-26 15:27:04:906",22000
197 | "2019-07-26 15:28:54:649",68000
198 | "2019-07-26 15:32:04:688",182000
199 | "2019-07-26 15:33:00:747",41000
200 | "2019-07-26 15:33:28:621",2000
201 | "2019-07-26 15:33:53:413",2000
202 | "2019-07-26 15:35:07:067",55000
203 | "2019-07-26 15:39:20:455",219000
204 | "2019-07-26 15:39:42:746",4000
205 | "2019-07-26 19:22:21:203",267000
206 | "2019-07-26 19:25:13:692",161000
207 | "2019-07-26 19:29:46:625",255000
208 | "2019-07-26 19:30:01:889",0
209 | "2019-07-26 19:30:02:468",1000
210 | "2019-07-26 19:30:17:765",12000
211 | "2019-07-26 19:30:40:191",20000
212 | "2019-07-26 19:38:27:007",464000
213 | "2019-07-26 19:43:55:959",318000
214 | "2019-07-26 19:45:43:088",27000
215 | "2019-07-26 19:49:41:497",235000
216 | "2019-07-26 19:53:00:121",135000
217 | "2019-07-26 20:01:36:290",510000
218 | "2019-07-26 20:06:18:097",238000
219 | "2019-07-26 20:20:27:317",152000
220 | "2019-07-26 20:20:29:917",0
221 | "2019-07-26 20:20:31:781",0
222 | "2019-07-26 20:22:59:020",147000
223 | "2019-07-26 20:23:13:091",13000
224 | "2019-07-26 20:24:17:730",39000
225 | "2019-07-26 20:25:24:102",42000
226 | "2019-07-26 20:25:38:354",4000
227 | "2019-07-26 20:25:41:115",0
228 | "2019-07-26 20:25:48:254",2000
229 | "2019-07-26 20:30:49:468",301000
230 | "2019-07-26 20:38:03:533",347000
231 | "2019-07-26 20:54:19:103",300000
232 | "2019-07-26 21:00:50:639",200000
233 | "2019-07-26 21:00:53:019",0
234 | "2019-07-27 00:20:18:271",300000
235 | "2019-07-27 01:08:42:184",539000
236 | "2019-07-27 01:14:21:023",47000
237 | "2019-07-27 01:24:02:808",566000
238 | "2019-07-27 01:29:27:642",0
239 | "2019-07-27 01:35:53:450",384000
240 | "2019-07-27 01:38:03:223",125000
241 | "2019-07-27 01:38:11:789",4000
242 | "2019-07-27 01:39:45:368",76000
243 | "2019-07-27 01:53:39:218",830000
244 | "2019-07-27 02:24:21:961",508000
245 | "2019-07-27 02:35:59:680",0
246 | "2019-07-27 02:46:25:263",619000
247 | "2019-07-27 02:57:21:450",594000
248 | "2019-07-27 03:03:00:968",0
249 | "2019-07-27 03:03:08:164",1000
250 | "2019-07-27 03:06:58:765",205000
251 | "2019-07-27 03:07:20:719",20000
252 | "2019-07-27 03:08:31:169",53000
253 | "2019-07-27 03:11:43:735",6000
254 | "2019-07-27 03:13:05:674",12000
255 | "2019-07-27 03:13:56:643",32000
256 | "2019-07-27 03:38:03:943",300000
257 | "2019-07-27 03:43:53:865",9000
258 | "2019-07-27 03:50:42:103",1000
259 | "2019-07-27 03:51:34:959",3000
260 | "2019-07-27 03:56:42:387",300000
261 | "2019-07-27 03:59:34:855",0
262 | "2019-07-27 03:59:36:444",0
263 | "2019-07-27 19:34:16:168",300000
264 | "2019-07-27 19:46:59:991",585000
265 | "2019-07-27 19:54:53:296",407000
266 | "2019-07-27 19:59:23:604",265000
267 | "2019-07-27 20:09:16:889",300000
268 | "2019-07-28 02:25:44:365",300000
269 | "2019-07-28 02:29:16:262",56000
270 | "2019-07-28 02:29:25:988",2000
271 | "2019-07-28 02:29:34:107",5000
272 | "2019-07-28 02:37:06:531",449000
273 | "2019-07-28 02:40:30:957",17000
274 | "2019-07-28 02:43:13:366",1000
275 | "2019-07-28 02:43:48:781",28000
276 | "2019-07-28 02:52:00:872",473000
277 | "2019-07-28 02:52:02:829",0
278 | "2019-07-28 03:18:51:402",196000
279 | "2019-07-28 03:19:26:897",13000
280 | "2019-07-28 03:19:29:768",0
281 | "2019-07-28 03:19:32:418",0
282 | "2019-07-28 03:20:21:596",47000
283 | "2019-07-28 03:29:11:674",519000
284 | "2019-07-28 03:33:15:270",240000
285 | "2019-07-28 03:34:11:776",47000
286 | "2019-07-28 03:35:04:586",7000
287 | "2019-07-28 03:37:04:925",9000
288 | "2019-07-28 03:37:20:791",11000
289 | "2019-07-28 03:37:21:733",0
290 | "2019-07-28 03:37:24:985",0
291 | "2019-07-28 03:37:38:768",10000
292 | "2019-07-28 03:38:01:362",0
293 | "2019-07-28 18:44:57:156",713000
294 | "2019-07-28 18:54:09:170",6000
295 | "2019-07-28 18:54:11:764",0
296 | "2019-07-28 18:54:14:586",0
297 | "2019-07-28 18:54:16:310",1000
298 | "2019-07-28 18:54:44:996",26000
299 | "2019-07-28 18:59:20:355",220000
300 | "2019-07-28 19:09:30:032",182000
301 | "2019-07-28 19:14:35:617",300000
302 | "2019-07-28 19:52:58:988",2262000
303 | "2019-07-28 19:59:03:537",2000
304 | "2019-07-28 19:59:14:598",12000
305 |
--------------------------------------------------------------------------------