From 6c966513e7ac8f64a4b05ca7c414563cb8010461 Mon Sep 17 00:00:00 2001 From: chandumopuri Date: Sat, 23 Jun 2018 14:59:38 +0530 Subject: [PATCH 1/8] raise an exception in thread --- .../bin/Abstraction/AbstractAnimal.class | Bin 1019 -> 1019 bytes .../{arraylist.java => hello.java} | 2 +- .../tecmax/methodExamples/swapingsring.java | 6 --- .../com/tecmax/methodExamples/swapstr.java | 19 ---------- .../com/tecmax/methodExamples/swapstring.java | 5 --- .../com/tecmax/methodExamples/thread2.java | 35 ++++++++++++++++++ 6 files changed, 36 insertions(+), 31 deletions(-) rename TecmaxPractise/src/com/tecmax/methodExamples/{arraylist.java => hello.java} (60%) delete mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/swapingsring.java delete mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/swapstr.java delete mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/swapstring.java create mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/thread2.java diff --git a/Android java/SoftGen/bin/Abstraction/AbstractAnimal.class b/Android java/SoftGen/bin/Abstraction/AbstractAnimal.class index c2d2e86d6a1cebb7e1d662b36c50e6e7ad6b1e6e..ef0c16ce2102e558099c0c1cb179f2493036e5e7 100644 GIT binary patch delta 61 zcmey({+oS+AQPJ^7Xvec&Sr6@a>mIAnZ=}xH!?6VFfnieNj3&XAj!zU4HjXT+|4Y> LWU^uMO=cwkYOD&a delta 61 zcmey({+oS+AQPJo7Xvec>Sl4Ka>mIAnZ=}xH!v_TFfnieNj3&XAj!zU4HjXT+|4Y> LWU_JcO=cwkYOo5e diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/arraylist.java b/TecmaxPractise/src/com/tecmax/methodExamples/hello.java similarity index 60% rename from TecmaxPractise/src/com/tecmax/methodExamples/arraylist.java rename to TecmaxPractise/src/com/tecmax/methodExamples/hello.java index 0b0acd7..8817eee 100644 --- a/TecmaxPractise/src/com/tecmax/methodExamples/arraylist.java +++ b/TecmaxPractise/src/com/tecmax/methodExamples/hello.java @@ -1,5 +1,5 @@ package com.tecmax.methodExamples; -public class arraylist { +public class hello { } diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/swapingsring.java b/TecmaxPractise/src/com/tecmax/methodExamples/swapingsring.java deleted file mode 100644 index 1f6644a..0000000 --- a/TecmaxPractise/src/com/tecmax/methodExamples/swapingsring.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.tecmax.methodExamples; - -public class swapingsring { - pub - -} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/swapstr.java b/TecmaxPractise/src/com/tecmax/methodExamples/swapstr.java deleted file mode 100644 index f769787..0000000 --- a/TecmaxPractise/src/com/tecmax/methodExamples/swapstr.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.tecmax.methodExamples; - -public class swapstr { - - public static void main(String[] args) { - // TODO Auto-generated method stub - String a="java"; - String b="programming"; - - a.concat(b); - b=a.substring(0, (a.length()-b.length())); - a=a.substring(b.length()); - System.out.println("value of a: "+a); - System.out.println("value of b: "+b); - - - } - -} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/swapstring.java b/TecmaxPractise/src/com/tecmax/methodExamples/swapstring.java deleted file mode 100644 index 0a7b029..0000000 --- a/TecmaxPractise/src/com/tecmax/methodExamples/swapstring.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.tecmax.methodExamples; - -public class swapstring { - -} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/thread2.java b/TecmaxPractise/src/com/tecmax/methodExamples/thread2.java new file mode 100644 index 0000000..b007b81 --- /dev/null +++ b/TecmaxPractise/src/com/tecmax/methodExamples/thread2.java @@ -0,0 +1,35 @@ +package com.tecmax.methodExamples; + +public class thread2 extends Thread { + + public void run() + { + try + { + + System.out.println ("Thread " + + Thread.currentThread().getId() + + " is running"); + + } + catch (Exception e) + { + + System.out.println ("Exception is caught"); + } + } +} + + +public class thread3 +{ + public static void main(String[] args) + { + int n =8; + for (int i=0; i<8; i++) + { + thread2 object = new thread2(); + object.start(); + } + } +} From 6c7cae3581763c9117e283f2c24747ea2fe0027a Mon Sep 17 00:00:00 2001 From: chandumopuri Date: Sun, 24 Jun 2018 14:16:31 +0530 Subject: [PATCH 2/8] map using java --- .../src/com/tecmax/methodExamples/Harish.java | 15 -------- .../com/tecmax/methodExamples/Madhuri.java | 18 ---------- .../methodExamples/StringHandlings.java | 11 ------ .../com/tecmax/methodExamples/arraylist.java | 5 +++ .../methodExamples/arraylisttoarray.java | 2 +- .../src/com/tecmax/methodExamples/hello.java | 5 --- .../src/com/tecmax/methodExamples/map.java | 22 ++++++++++++ .../src/com/tecmax/methodExamples/set.java | 25 +++++++++++++ .../com/tecmax/methodExamples/thread2.java | 35 ------------------- 9 files changed, 53 insertions(+), 85 deletions(-) delete mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/Harish.java delete mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/Madhuri.java delete mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/StringHandlings.java create mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/arraylist.java delete mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/hello.java create mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/map.java create mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/set.java delete mode 100644 TecmaxPractise/src/com/tecmax/methodExamples/thread2.java diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/Harish.java b/TecmaxPractise/src/com/tecmax/methodExamples/Harish.java deleted file mode 100644 index 89b4080..0000000 --- a/TecmaxPractise/src/com/tecmax/methodExamples/Harish.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tecmax.methodExamples; - -public class Harish { - - public static void main(String[] args) { - int customPPl = 20 + Madhuri.getAllFriendsCount() + 50; - System.out.println(customPPl); - } - - /** Information Comment -- Static Block Example **/ - static { - System.out.println("Welcome to java and git.\nHope this is interesting"); - } - -} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/Madhuri.java b/TecmaxPractise/src/com/tecmax/methodExamples/Madhuri.java deleted file mode 100644 index 9010d20..0000000 --- a/TecmaxPractise/src/com/tecmax/methodExamples/Madhuri.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.tecmax.methodExamples; - -public class Madhuri { - public static void main(String[] args) { - Madhuri madhuri = new Madhuri(); - madhuri.getFriendsList("Nandini"); - int count =getAllFriendsCount(); - System.out.println(count); - } - - public static int getAllFriendsCount() { - return 10; - } - - private void getFriendsList(String string) { - System.out.println(string +" is Madhuri Friend"); - } -} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/StringHandlings.java b/TecmaxPractise/src/com/tecmax/methodExamples/StringHandlings.java deleted file mode 100644 index 9093437..0000000 --- a/TecmaxPractise/src/com/tecmax/methodExamples/StringHandlings.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tecmax.methodExamples; - -public class StringHandlings { - - public static void main(String[] args) { - String a = "hi how are u"; - System.out.println(a.substring(0, 6)); - System.out.println("Nandu"); - } - -} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/arraylist.java b/TecmaxPractise/src/com/tecmax/methodExamples/arraylist.java new file mode 100644 index 0000000..561c9bc --- /dev/null +++ b/TecmaxPractise/src/com/tecmax/methodExamples/arraylist.java @@ -0,0 +1,5 @@ +ckage com.tecmax.methodExamples; + +public class arraylist { + +} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/arraylisttoarray.java b/TecmaxPractise/src/com/tecmax/methodExamples/arraylisttoarray.java index 8edbfc9..8bdb167 100644 --- a/TecmaxPractise/src/com/tecmax/methodExamples/arraylisttoarray.java +++ b/TecmaxPractise/src/com/tecmax/methodExamples/arraylisttoarray.java @@ -7,7 +7,7 @@ public class arraylisttoarray { public static void main(String[] args) { // TODO Auto-generated method stub - List list=new ArrayList<>(); + ArrayList list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/hello.java b/TecmaxPractise/src/com/tecmax/methodExamples/hello.java deleted file mode 100644 index 8817eee..0000000 --- a/TecmaxPractise/src/com/tecmax/methodExamples/hello.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.tecmax.methodExamples; - -public class hello { - -} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/map.java b/TecmaxPractise/src/com/tecmax/methodExamples/map.java new file mode 100644 index 0000000..de105e6 --- /dev/null +++ b/TecmaxPractise/src/com/tecmax/methodExamples/map.java @@ -0,0 +1,22 @@ +package com.tecmax.methodExamples; + +import java.util.LinkedHashMap; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +public class map { + + public static void main(String[] args) { + LinkedHashMapset= new LinkedHashMap (); + set.put("hello",100); + set.put("hi",200); + set.put("hello1",300); + set.put("are",400); + for (Map.Entry m: set.entrySet()) + System.out.println(m.getValue()+""+m.getKey()); + + } + + } + diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/set.java b/TecmaxPractise/src/com/tecmax/methodExamples/set.java new file mode 100644 index 0000000..6b92118 --- /dev/null +++ b/TecmaxPractise/src/com/tecmax/methodExamples/set.java @@ -0,0 +1,25 @@ +package com.tecmax.methodExamples; + +import java.util.HashSet; +import java.util.Iterator; + +public class set { + + public static void main(String[] args) { + // TODO Auto-generated method stub +HashSet set= new HashSet(); +set.add("hello"); +set.add("hi"); +set.add("hello1"); +set.add("are"); +boolean isremoved= set.remove( "hi"); +System.out.println("value after removed is"+isremoved); +System.out.println(set.size()); +Iterator itr= set.iterator(); +while (itr.hasNext()){ +System.out.println(itr.next()); + +} + } + +} diff --git a/TecmaxPractise/src/com/tecmax/methodExamples/thread2.java b/TecmaxPractise/src/com/tecmax/methodExamples/thread2.java deleted file mode 100644 index b007b81..0000000 --- a/TecmaxPractise/src/com/tecmax/methodExamples/thread2.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.tecmax.methodExamples; - -public class thread2 extends Thread { - - public void run() - { - try - { - - System.out.println ("Thread " + - Thread.currentThread().getId() + - " is running"); - - } - catch (Exception e) - { - - System.out.println ("Exception is caught"); - } - } -} - - -public class thread3 -{ - public static void main(String[] args) - { - int n =8; - for (int i=0; i<8; i++) - { - thread2 object = new thread2(); - object.start(); - } - } -} From 18431bf14274004051b01307afea6a1e46f42900 Mon Sep 17 00:00:00 2001 From: Amv Labs Date: Mon, 13 Aug 2018 13:49:25 +0530 Subject: [PATCH 3/8] Add Phone Contact Directly --- .../.idea/caches/build_file_checksums.ser | Bin 539 -> 539 bytes BroadCast/.idea/compiler.xml | 22 - .../.idea/copyright/profiles_settings.xml | 3 - BroadCast/.idea/encodings.xml | 6 + BroadCast/.idea/misc.xml | 9 +- BroadCast/app/src/main/AndroidManifest.xml | 6 +- .../com/broadcast/softgen/broadcast/DAB.java | 21 + .../softgen/broadcast/MainActivity.java | 1 + .../softgen/broadcast/OTPReceiver.java | 15 + ContactsReading/.gitignore | 10 + .../.idea/caches/build_file_checksums.ser | Bin 0 -> 539 bytes ContactsReading/.idea/codeStyles/Project.xml | 29 ++ ContactsReading/.idea/encodings.xml | 6 + ContactsReading/.idea/gradle.xml | 18 + ContactsReading/.idea/misc.xml | 34 ++ ContactsReading/.idea/runConfigurations.xml | 12 + ContactsReading/app/.gitignore | 1 + ContactsReading/app/build.gradle | 28 ++ ContactsReading/app/proguard-rules.pro | 21 + .../ExampleInstrumentedTest.java | 26 ++ .../app/src/main/AndroidManifest.xml | 26 ++ .../contactsreading/AddPhoneActivity.java | 137 ++++++ .../glowroad/contactsreading/ContactDTO.java | 291 ++++++++++++ .../ContactOperationActivity.java | 423 ++++++++++++++++++ .../com/glowroad/contactsreading/DataDTO.java | 4 + .../contactsreading/MainActivity.java | 192 ++++++++ .../drawable-v24/ic_launcher_foreground.xml | 34 ++ .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../main/res/layout/activity_add_phone.xml | 78 ++++ .../res/layout/activity_contact_operation.xml | 31 ++ .../app/src/main/res/layout/activity_main.xml | 31 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes .../app/src/main/res/values/colors.xml | 6 + .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 11 + .../contactsreading/ExampleUnitTest.java | 17 + ContactsReading/build.gradle | 27 ++ ContactsReading/gradle.properties | 13 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54708 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + ContactsReading/gradlew | 172 +++++++ ContactsReading/gradlew.bat | 84 ++++ ContactsReading/settings.gradle | 1 + 54 files changed, 2005 insertions(+), 30 deletions(-) delete mode 100644 BroadCast/.idea/compiler.xml delete mode 100644 BroadCast/.idea/copyright/profiles_settings.xml create mode 100644 BroadCast/.idea/encodings.xml create mode 100644 BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/DAB.java create mode 100644 BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/OTPReceiver.java create mode 100644 ContactsReading/.gitignore create mode 100644 ContactsReading/.idea/caches/build_file_checksums.ser create mode 100644 ContactsReading/.idea/codeStyles/Project.xml create mode 100644 ContactsReading/.idea/encodings.xml create mode 100644 ContactsReading/.idea/gradle.xml create mode 100644 ContactsReading/.idea/misc.xml create mode 100644 ContactsReading/.idea/runConfigurations.xml create mode 100644 ContactsReading/app/.gitignore create mode 100644 ContactsReading/app/build.gradle create mode 100644 ContactsReading/app/proguard-rules.pro create mode 100644 ContactsReading/app/src/androidTest/java/com/glowroad/contactsreading/ExampleInstrumentedTest.java create mode 100644 ContactsReading/app/src/main/AndroidManifest.xml create mode 100644 ContactsReading/app/src/main/java/com/glowroad/contactsreading/AddPhoneActivity.java create mode 100644 ContactsReading/app/src/main/java/com/glowroad/contactsreading/ContactDTO.java create mode 100644 ContactsReading/app/src/main/java/com/glowroad/contactsreading/ContactOperationActivity.java create mode 100644 ContactsReading/app/src/main/java/com/glowroad/contactsreading/DataDTO.java create mode 100644 ContactsReading/app/src/main/java/com/glowroad/contactsreading/MainActivity.java create mode 100644 ContactsReading/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 ContactsReading/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 ContactsReading/app/src/main/res/layout/activity_add_phone.xml create mode 100644 ContactsReading/app/src/main/res/layout/activity_contact_operation.xml create mode 100644 ContactsReading/app/src/main/res/layout/activity_main.xml create mode 100644 ContactsReading/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 ContactsReading/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 ContactsReading/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 ContactsReading/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 ContactsReading/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 ContactsReading/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 ContactsReading/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 ContactsReading/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 ContactsReading/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 ContactsReading/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 ContactsReading/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 ContactsReading/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 ContactsReading/app/src/main/res/values/colors.xml create mode 100644 ContactsReading/app/src/main/res/values/strings.xml create mode 100644 ContactsReading/app/src/main/res/values/styles.xml create mode 100644 ContactsReading/app/src/test/java/com/glowroad/contactsreading/ExampleUnitTest.java create mode 100644 ContactsReading/build.gradle create mode 100644 ContactsReading/gradle.properties create mode 100644 ContactsReading/gradle/wrapper/gradle-wrapper.jar create mode 100644 ContactsReading/gradle/wrapper/gradle-wrapper.properties create mode 100644 ContactsReading/gradlew create mode 100644 ContactsReading/gradlew.bat create mode 100644 ContactsReading/settings.gradle diff --git a/BroadCast/.idea/caches/build_file_checksums.ser b/BroadCast/.idea/caches/build_file_checksums.ser index 6d6c600f77b4f9c2761bae8f8274b50d5574234a..09d1fe0bd66e2cee3b2e2cfeb1cdb6dfa1483d42 100644 GIT binary patch delta 36 ucmV+<0NekY1e*kqmjz`qC>XerocRzwo~L8PSVUN_QX`n~ff{C$r2%#go)0Pj delta 36 ucmV+<0NekY1e*kqmjz - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/BroadCast/.idea/copyright/profiles_settings.xml b/BroadCast/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/BroadCast/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/BroadCast/.idea/encodings.xml b/BroadCast/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/BroadCast/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BroadCast/.idea/misc.xml b/BroadCast/.idea/misc.xml index 635999d..99202cc 100644 --- a/BroadCast/.idea/misc.xml +++ b/BroadCast/.idea/misc.xml @@ -5,11 +5,12 @@ @@ -24,7 +25,7 @@ - + diff --git a/BroadCast/app/src/main/AndroidManifest.xml b/BroadCast/app/src/main/AndroidManifest.xml index 135b62c..5515b73 100644 --- a/BroadCast/app/src/main/AndroidManifest.xml +++ b/BroadCast/app/src/main/AndroidManifest.xml @@ -32,9 +32,13 @@ android:enabled="true" android:exported="true"> - + + \ No newline at end of file diff --git a/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/DAB.java b/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/DAB.java new file mode 100644 index 0000000..b40bc6d --- /dev/null +++ b/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/DAB.java @@ -0,0 +1,21 @@ +package com.broadcast.softgen.broadcast; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +public class DAB extends SQLiteOpenHelper { + public DAB(Context context) { + super(context, "sdf", null, 1); + } + + @Override + public void onCreate(SQLiteDatabase db) { + + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + } +} diff --git a/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/MainActivity.java b/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/MainActivity.java index f1e9134..8c536c0 100644 --- a/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/MainActivity.java +++ b/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/MainActivity.java @@ -39,6 +39,7 @@ public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + getPermissions(this, REQUEST_CODE_READ_PHONE_STATE); recyclerView = (RecyclerView) findViewById(R.id.listRecycle); alertText = (TextView) findViewById(R.id.alertText); diff --git a/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/OTPReceiver.java b/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/OTPReceiver.java new file mode 100644 index 0000000..d1b54cb --- /dev/null +++ b/BroadCast/app/src/main/java/com/broadcast/softgen/broadcast/OTPReceiver.java @@ -0,0 +1,15 @@ +package com.broadcast.softgen.broadcast; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class OTPReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + // TODO: This method is called when the BroadcastReceiver is receiving + // an Intent broadcast. + throw new UnsupportedOperationException("Not yet implemented"); + } +} diff --git a/ContactsReading/.gitignore b/ContactsReading/.gitignore new file mode 100644 index 0000000..5edb4ee --- /dev/null +++ b/ContactsReading/.gitignore @@ -0,0 +1,10 @@ +*.iml +.gradle +/local.properties +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/ContactsReading/.idea/caches/build_file_checksums.ser b/ContactsReading/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000000000000000000000000000000000000..d5439ee6d07ebfa0f53288b1ae745f3522decfc0 GIT binary patch literal 539 zcmZ4UmVvdnh`~NNKUXg?FQq6yGexf?KR>5fFEb@IQ7^qHF(oHeub?PDD>b=9F91S2 zm1gFoxMk*~I%lLNXBU^|7Q2L-Ts|(GuF1r} zK_Ic9ASMaqbf~vVix`-qoz{F7|G~x)@_>nf0c16U!0xK-Udfj+MtW~<+4l71-Um9d zIJKlCGcUaurm>Krj)4uNcHYf|eKz;m^K=vRq{5vJFDzl;L9qd@@DlfAi7Hlu+pONs z2G=(|hz2?*CqFqc2NbjgsYNB3sl}ym#f<;zq7JR;fAC=!OG}T^wM!)oTFzE6p~b01 z#W60fK0XQo&M{D@#2{h_!~C?MYbbx5+lm K_}N*3qzVABRJ%O@ literal 0 HcmV?d00001 diff --git a/ContactsReading/.idea/codeStyles/Project.xml b/ContactsReading/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/ContactsReading/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ContactsReading/.idea/encodings.xml b/ContactsReading/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/ContactsReading/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ContactsReading/.idea/gradle.xml b/ContactsReading/.idea/gradle.xml new file mode 100644 index 0000000..7ac24c7 --- /dev/null +++ b/ContactsReading/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/ContactsReading/.idea/misc.xml b/ContactsReading/.idea/misc.xml new file mode 100644 index 0000000..99202cc --- /dev/null +++ b/ContactsReading/.idea/misc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/ContactsReading/.idea/runConfigurations.xml b/ContactsReading/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/ContactsReading/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/ContactsReading/app/.gitignore b/ContactsReading/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/ContactsReading/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/ContactsReading/app/build.gradle b/ContactsReading/app/build.gradle new file mode 100644 index 0000000..4f02f0b --- /dev/null +++ b/ContactsReading/app/build.gradle @@ -0,0 +1,28 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 27 + defaultConfig { + applicationId "com.glowroad.contactsreading" + minSdkVersion 21 + targetSdkVersion 27 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support.constraint:constraint-layout:1.1.2' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} diff --git a/ContactsReading/app/proguard-rules.pro b/ContactsReading/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/ContactsReading/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/ContactsReading/app/src/androidTest/java/com/glowroad/contactsreading/ExampleInstrumentedTest.java b/ContactsReading/app/src/androidTest/java/com/glowroad/contactsreading/ExampleInstrumentedTest.java new file mode 100644 index 0000000..fbb7d75 --- /dev/null +++ b/ContactsReading/app/src/androidTest/java/com/glowroad/contactsreading/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.glowroad.contactsreading; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.glowroad.contactsreading", appContext.getPackageName()); + } +} diff --git a/ContactsReading/app/src/main/AndroidManifest.xml b/ContactsReading/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..b02a8e3 --- /dev/null +++ b/ContactsReading/app/src/main/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ContactsReading/app/src/main/java/com/glowroad/contactsreading/AddPhoneActivity.java b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/AddPhoneActivity.java new file mode 100644 index 0000000..b6ce865 --- /dev/null +++ b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/AddPhoneActivity.java @@ -0,0 +1,137 @@ +package com.glowroad.contactsreading; + +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.provider.ContactsContract; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Spinner; +import android.widget.Toast; + +public class AddPhoneActivity extends AppCompatActivity { + private EditText displayNameEditor; + + private EditText phoneNumberEditor; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_phone); + displayNameEditor = (EditText)findViewById(R.id.add_phone_contact_display_name); + + phoneNumberEditor = (EditText)findViewById(R.id.add_phone_contact_number); + + // Initialize phone type dropdown spinner. + final Spinner phoneTypeSpinner = (Spinner)findViewById(R.id.add_phone_contact_type); + String phoneTypeArr[] = {"Mobile", "Home", "Work"}; + ArrayAdapter phoneTypeSpinnerAdaptor = new ArrayAdapter(this, android.R.layout.simple_spinner_item, phoneTypeArr); + phoneTypeSpinner.setAdapter(phoneTypeSpinnerAdaptor); + + // Click this button to save user input phone contact info. + Button savePhoneContactButton = (Button)findViewById(R.id.add_phone_contact_save_button); + savePhoneContactButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + // Get android phone contact content provider uri. + //Uri addContactsUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; + // Below uri can avoid java.lang.UnsupportedOperationException: URI: content://com.android.contacts/data/phones error. + Uri addContactsUri = ContactsContract.Data.CONTENT_URI; + + // Add an empty contact and get the generated id. + long rowContactId = getRawContactId(); + + // Add contact name data. + String displayName = displayNameEditor.getText().toString(); + insertContactDisplayName(addContactsUri, rowContactId, displayName); + + // Add contact phone data. + String phoneNumber = phoneNumberEditor.getText().toString(); + String phoneTypeStr = (String)phoneTypeSpinner.getSelectedItem(); + insertContactPhoneNumber(addContactsUri, rowContactId, phoneNumber, phoneTypeStr); + + Toast.makeText(getApplicationContext(),"New contact has been added, go back to previous page to see it in contacts list." , Toast.LENGTH_LONG).show(); + + finish(); + } + }); + } + + // This method will only insert an empty data to RawContacts.CONTENT_URI + // The purpose is to get a system generated raw contact id. + private long getRawContactId() + { + // Inser an empty contact. + ContentValues contentValues = new ContentValues(); + Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, contentValues); + // Get the newly created contact raw id. + long ret = ContentUris.parseId(rawContactUri); + return ret; + } + + + // Insert newly created contact display name. + private void insertContactDisplayName(Uri addContactsUri, long rawContactId, String displayName) + { + ContentValues contentValues = new ContentValues(); + + contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); + + // Each contact must has an mime type to avoid java.lang.IllegalArgumentException: mimetype is required error. + contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); + + // Put contact display name value. + contentValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, displayName); + + getContentResolver().insert(addContactsUri, contentValues); + + } + + private void insertContactPhoneNumber(Uri addContactsUri, long rawContactId, String phoneNumber, String phoneTypeStr) + { + // Create a ContentValues object. + ContentValues contentValues = new ContentValues(); + + // Each contact must has an id to avoid java.lang.IllegalArgumentException: raw_contact_id is required error. + contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); + + // Each contact must has an mime type to avoid java.lang.IllegalArgumentException: mimetype is required error. + contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); + + // Put phone number value. + contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber); + + // Calculate phone type by user selection. + int phoneContactType = ContactsContract.CommonDataKinds.Phone.TYPE_HOME; + + if("home".equalsIgnoreCase(phoneTypeStr)) + { + phoneContactType = ContactsContract.CommonDataKinds.Phone.TYPE_HOME; + }else if("mobile".equalsIgnoreCase(phoneTypeStr)) + { + phoneContactType = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE; + }else if("work".equalsIgnoreCase(phoneTypeStr)) + { + phoneContactType = ContactsContract.CommonDataKinds.Phone.TYPE_WORK; + } + // Put phone type value. + contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, phoneContactType); + + // Insert new contact data into phone contact list. + getContentResolver().insert(addContactsUri, contentValues); + + } + + // ListPhoneContactsActivity use this method to start this activity. + public static void start(Context context) + { + Intent intent = new Intent(context, AddPhoneActivity.class); + context.startActivity(intent); + } +} diff --git a/ContactsReading/app/src/main/java/com/glowroad/contactsreading/ContactDTO.java b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/ContactDTO.java new file mode 100644 index 0000000..d7d62c2 --- /dev/null +++ b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/ContactDTO.java @@ -0,0 +1,291 @@ +package com.glowroad.contactsreading; + +import java.util.ArrayList; +import java.util.List; + +public class ContactDTO { + // Contact belong group fields. + private long groupId; + + // Contacts id. + private long contactId; + + // Raw contacts id. Has same value of contact id. + private long rawContactId; + + // Contact structured name fields. + private String displayName; + private String givenName; + private String familyName; + + // Contact nickname fields. + private String nickName; + + // Contact organization fields. + private String company; + private String department; + private String title; + private String jobDescription; + private String officeLocation; + + // Contact phone list. + private List phoneList = new ArrayList(); + + // Contact email list + private List emailList = new ArrayList(); + + // Contact address list. + private List addressList = new ArrayList(); + + // Contact website list. + private List websiteList = new ArrayList(); + + // Contact note. + private String note; + + // Contact im list. + private List imList = new ArrayList(); + + // Contact postal fields. + private String country; + private String city; + private String postCode; + private String street; + private String region; + private long postType; + + // Contact identity fields. + // Identity value + private String identity; + // Identity card, passport etc. + private String namespace; + + // Contact photo fields. + private String photo; + private String photoFieldId; + + public long getContactId() { + return contactId; + } + + public void setContactId(long contactId) { + this.contactId = contactId; + } + + public long getRawContactId() { + return rawContactId; + } + + public void setRawContactId(long rawContactId) { + this.rawContactId = rawContactId; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getGivenName() { + return givenName; + } + + public void setGivenName(String givenName) { + this.givenName = givenName; + } + + public String getFamilyName() { + return familyName; + } + + public void setFamilyName(String familyName) { + this.familyName = familyName; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getPhoneList() { + return phoneList; + } + + public void setPhoneList(List phoneList) { + this.phoneList = phoneList; + } + + public List getEmailList() { + return emailList; + } + + public void setEmailList(List emailList) { + this.emailList = emailList; + } + + public List getAddressList() { + return addressList; + } + + public void setAddressList(List addressList) { + this.addressList = addressList; + } + + public List getWebsiteList() { + return websiteList; + } + + public void setWebsiteList(List websiteList) { + this.websiteList = websiteList; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getJobDescription() { + return jobDescription; + } + + public void setJobDescription(String jobDescription) { + this.jobDescription = jobDescription; + } + + public String getOfficeLocation() { + return officeLocation; + } + + public void setOfficeLocation(String officeLocation) { + this.officeLocation = officeLocation; + } + + public List getImList() { + return imList; + } + + public void setImList(List imList) { + this.imList = imList; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getRegion() { + return region; + } + + public void setRegion(String region) { + this.region = region; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getNamespace() { + return namespace; + } + + public void setNamespace(String namespace) { + this.namespace = namespace; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getPhotoFieldId() { + return photoFieldId; + } + + public void setPhotoFieldId(String photoFieldId) { + this.photoFieldId = photoFieldId; + } + + public long getGroupId() { + return groupId; + } + + public void setGroupId(long groupId) { + this.groupId = groupId; + } + + public String getPostCode() { + return postCode; + } + + public void setPostCode(String postCode) { + this.postCode = postCode; + } + + public long getPostType() { + return postType; + } + + public void setPostType(long postType) { + this.postType = postType; + } +} diff --git a/ContactsReading/app/src/main/java/com/glowroad/contactsreading/ContactOperationActivity.java b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/ContactOperationActivity.java new file mode 100644 index 0000000..2616c39 --- /dev/null +++ b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/ContactOperationActivity.java @@ -0,0 +1,423 @@ +package com.glowroad.contactsreading; + +import android.Manifest; +import android.content.ContentResolver; +import android.content.pm.PackageManager; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.ContactsContract; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +import java.util.ArrayList; +import java.util.List; + +public class ContactOperationActivity extends AppCompatActivity { + private static final String TAG_ANDROID_CONTACTS = "ANDROID_CONTACTS"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_contact_operation); + // Load all contacts, and print each contact as log debug info. + Button loadButton = (Button) findViewById(R.id.contact_operate_load); + loadButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (!hasPhoneContactsPermission(Manifest.permission.READ_CONTACTS)) { + requestPermission(Manifest.permission.READ_CONTACTS); + } else { + getAllContacts(); + Toast.makeText(ContactOperationActivity.this, "Contact data has been printed in the android monitor log..", Toast.LENGTH_SHORT).show(); + } + } + }); + } + + /* Return all contacts and show each contact data in android monitor console as debug info. */ + private List getAllContacts() { + List ret = new ArrayList(); + + // Get all raw contacts id list. + List rawContactsIdList = getRawContactsIdList(); + + int contactListSize = rawContactsIdList.size(); + + ContentResolver contentResolver = getContentResolver(); + + // Loop in the raw contacts list. + for (int i = 0; i < contactListSize; i++) { + // Get the raw contact id. + Integer rawContactId = rawContactsIdList.get(i); + + Log.d(TAG_ANDROID_CONTACTS, "raw contact id : " + rawContactId.intValue()); + + // Data content uri (access data table. ) + Uri dataContentUri = ContactsContract.Data.CONTENT_URI; + + // Build query columns name array. + List queryColumnList = new ArrayList(); + + // ContactsContract.Data.CONTACT_ID = "contact_id"; + queryColumnList.add(ContactsContract.Data.CONTACT_ID); + + // ContactsContract.Data.MIMETYPE = "mimetype"; + queryColumnList.add(ContactsContract.Data.MIMETYPE); + + queryColumnList.add(ContactsContract.Data.DATA1); + queryColumnList.add(ContactsContract.Data.DATA2); + queryColumnList.add(ContactsContract.Data.DATA3); + queryColumnList.add(ContactsContract.Data.DATA4); + queryColumnList.add(ContactsContract.Data.DATA5); + queryColumnList.add(ContactsContract.Data.DATA6); + queryColumnList.add(ContactsContract.Data.DATA7); + queryColumnList.add(ContactsContract.Data.DATA8); + queryColumnList.add(ContactsContract.Data.DATA9); + queryColumnList.add(ContactsContract.Data.DATA10); + queryColumnList.add(ContactsContract.Data.DATA11); + queryColumnList.add(ContactsContract.Data.DATA12); + queryColumnList.add(ContactsContract.Data.DATA13); + queryColumnList.add(ContactsContract.Data.DATA14); + queryColumnList.add(ContactsContract.Data.DATA15); + + // Translate column name list to array. + String queryColumnArr[] = queryColumnList.toArray(new String[queryColumnList.size()]); + + // Build query condition string. Query rows by contact id. + StringBuffer whereClauseBuf = new StringBuffer(); + whereClauseBuf.append(ContactsContract.Data.RAW_CONTACT_ID); + whereClauseBuf.append("="); + whereClauseBuf.append(rawContactId); + + // Query data table and return related contact data. + Cursor cursor = contentResolver.query(dataContentUri, queryColumnArr, whereClauseBuf.toString(), null, null); + + /* If this cursor return database table row data. + If do not check cursor.getCount() then it will throw error + android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0. + */ + if (cursor != null && cursor.getCount() > 0) { + StringBuffer lineBuf = new StringBuffer(); + cursor.moveToFirst(); + + lineBuf.append("Raw Contact Id : "); + lineBuf.append(rawContactId); + + long contactId = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID)); + lineBuf.append(" , Contact Id : "); + lineBuf.append(contactId); + + do { + // First get mimetype column value. + String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE)); + lineBuf.append(" \r\n , MimeType : "); + lineBuf.append(mimeType); + + List dataValueList = getColumnValueByMimetype(cursor, mimeType); + int dataValueListSize = dataValueList.size(); + for (int j = 0; j < dataValueListSize; j++) { + String dataValue = dataValueList.get(j); + lineBuf.append(" , "); + lineBuf.append(dataValue); + } + + } while (cursor.moveToNext()); + + Log.d(TAG_ANDROID_CONTACTS, lineBuf.toString()); + } + + Log.d(TAG_ANDROID_CONTACTS, "========================================================================="); + } + + return ret; + } + + /* + * Get email type related string format value. + * */ + private String getEmailTypeString(int dataType) { + String ret = ""; + + if (ContactsContract.CommonDataKinds.Email.TYPE_HOME == dataType) { + ret = "Home"; + } else if (ContactsContract.CommonDataKinds.Email.TYPE_WORK == dataType) { + ret = "Work"; + } + return ret; + } + + /* + * Get phone type related string format value. + * */ + private String getPhoneTypeString(int dataType) { + String ret = ""; + + if (ContactsContract.CommonDataKinds.Phone.TYPE_HOME == dataType) { + ret = "Home"; + } else if (ContactsContract.CommonDataKinds.Phone.TYPE_WORK == dataType) { + ret = "Work"; + } else if (ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE == dataType) { + ret = "Mobile"; + } + return ret; + } + + /* + * Return data column value by mimetype column value. + * Because for each mimetype there has not only one related value, + * such as Organization.CONTENT_ITEM_TYPE need return company, department, title, job description etc. + * So the return is a list string, each string for one column value. + * */ + private List getColumnValueByMimetype(Cursor cursor, String mimeType) { + List ret = new ArrayList(); + + switch (mimeType) { + // Get email data. + case ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE: + // Email.ADDRESS == data1 + String emailAddress = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS)); + // Email.TYPE == data2 + int emailType = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); + String emailTypeStr = getEmailTypeString(emailType); + + ret.add("Email Address : " + emailAddress); + ret.add("Email Int Type : " + emailType); + ret.add("Email String Type : " + emailTypeStr); + break; + + // Get im data. + case ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE: + // Im.PROTOCOL == data5 + String imProtocol = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Im.PROTOCOL)); + // Im.DATA == data1 + String imId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)); + + ret.add("IM Protocol : " + imProtocol); + ret.add("IM ID : " + imId); + break; + + // Get nickname + case ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE: + // Nickname.NAME == data1 + String nickName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Nickname.NAME)); + ret.add("Nick name : " + nickName); + break; + + // Get organization data. + case ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE: + // Organization.COMPANY == data1 + String company = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY)); + // Organization.DEPARTMENT == data5 + String department = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DEPARTMENT)); + // Organization.TITLE == data4 + String title = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)); + // Organization.JOB_DESCRIPTION == data6 + String jobDescription = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.JOB_DESCRIPTION)); + // Organization.OFFICE_LOCATION == data9 + String officeLocation = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.OFFICE_LOCATION)); + + ret.add("Company : " + company); + ret.add("department : " + department); + ret.add("Title : " + title); + ret.add("Job Description : " + jobDescription); + ret.add("Office Location : " + officeLocation); + break; + + // Get phone number. + case ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE: + // Phone.NUMBER == data1 + String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); + // Phone.TYPE == data2 + int phoneTypeInt = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); + String phoneTypeStr = getPhoneTypeString(phoneTypeInt); + + ret.add("Phone Number : " + phoneNumber); + ret.add("Phone Type Integer : " + phoneTypeInt); + ret.add("Phone Type String : " + phoneTypeStr); + break; + + // Get sip address. + case ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE: + // SipAddress.SIP_ADDRESS == data1 + String address = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS)); + // SipAddress.TYPE == data2 + int addressTypeInt = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.SipAddress.TYPE)); + String addressTypeStr = getEmailTypeString(addressTypeInt); + + ret.add("Address : " + address); + ret.add("Address Type Integer : " + addressTypeInt); + ret.add("Address Type String : " + addressTypeStr); + break; + + // Get display name. + case ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE: + // StructuredName.DISPLAY_NAME == data1 + String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); + // StructuredName.GIVEN_NAME == data2 + String givenName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); + // StructuredName.FAMILY_NAME == data3 + String familyName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); + + ret.add("Display Name : " + displayName); + ret.add("Given Name : " + givenName); + ret.add("Family Name : " + familyName); + break; + + // Get postal address. + case ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE: + // StructuredPostal.COUNTRY == data10 + String country = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); + // StructuredPostal.CITY == data7 + String city = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); + // StructuredPostal.REGION == data8 + String region = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION)); + // StructuredPostal.STREET == data4 + String street = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); + // StructuredPostal.POSTCODE == data9 + String postcode = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); + // StructuredPostal.TYPE == data2 + int postType = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); + String postTypeStr = getEmailTypeString(postType); + + ret.add("Country : " + country); + ret.add("City : " + city); + ret.add("Region : " + region); + ret.add("Street : " + street); + ret.add("Postcode : " + postcode); + ret.add("Post Type Integer : " + postType); + ret.add("Post Type String : " + postTypeStr); + break; + + // Get identity. + case ContactsContract.CommonDataKinds.Identity.CONTENT_ITEM_TYPE: + // Identity.IDENTITY == data1 + String identity = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Identity.IDENTITY)); + // Identity.NAMESPACE == data2 + String namespace = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Identity.NAMESPACE)); + + ret.add("Identity : " + identity); + ret.add("Identity Namespace : " + namespace); + break; + + // Get photo. + case ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE: + // Photo.PHOTO == data15 + String photo = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO)); + // Photo.PHOTO_FILE_ID == data14 + String photoFileId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID)); + + ret.add("Photo : " + photo); + ret.add("Photo File Id: " + photoFileId); + break; + + // Get group membership. + case ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE: + // GroupMembership.GROUP_ROW_ID == data1 + int groupId = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID)); + ret.add("Group ID : " + groupId); + break; + + // Get website. + case ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE: + // Website.URL == data1 + String websiteUrl = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL)); + // Website.TYPE == data2 + int websiteTypeInt = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Website.TYPE)); + String websiteTypeStr = getEmailTypeString(websiteTypeInt); + + ret.add("Website Url : " + websiteUrl); + ret.add("Website Type Integer : " + websiteTypeInt); + ret.add("Website Type String : " + websiteTypeStr); + break; + + // Get note. + case ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE: + // Note.NOTE == data1 + String note = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE)); + ret.add("Note : " + note); + break; + + } + + return ret; + } + + // Return all raw_contacts _id in a list. + private List getRawContactsIdList() { + List ret = new ArrayList(); + + ContentResolver contentResolver = getContentResolver(); + + // Row contacts content uri( access raw_contacts table. ). + Uri rawContactUri = ContactsContract.RawContacts.CONTENT_URI; + // Return _id column in contacts raw_contacts table. + String queryColumnArr[] = {ContactsContract.RawContacts._ID}; + // Query raw_contacts table and return raw_contacts table _id. + Cursor cursor = contentResolver.query(rawContactUri, queryColumnArr, null, null, null); + if (cursor != null) { + cursor.moveToFirst(); + do { + int idColumnIndex = cursor.getColumnIndex(ContactsContract.RawContacts._ID); + int rawContactsId = cursor.getInt(idColumnIndex); + ret.add(new Integer(rawContactsId)); + } while (cursor.moveToNext()); + } + + cursor.close(); + + return ret; + } + + + // Check whether user has phone contacts manipulation permission or not. + private boolean hasPhoneContactsPermission(String permission) { + boolean ret = false; + + // If android sdk version is bigger than 23 the need to check run time permission. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + // return phone read contacts permission grant status. + int hasPermission = ContextCompat.checkSelfPermission(getApplicationContext(), permission); + // If permission is granted then return true. + if (hasPermission == PackageManager.PERMISSION_GRANTED) { + ret = true; + } + } else { + ret = true; + } + return ret; + } + + // Request a runtime permission to app user. + private void requestPermission(String permission) { + String requestPermissionArray[] = {permission}; + ActivityCompat.requestPermissions(this, requestPermissionArray, 1); + } + + // After user select Allow or Deny button in request runtime permission dialog + // , this method will be invoked. + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + int length = grantResults.length; + if (length > 0) { + int grantResult = grantResults[0]; + + if (grantResult == PackageManager.PERMISSION_GRANTED) { + + Toast.makeText(getApplicationContext(), "You allowed permission, please click the button again.", Toast.LENGTH_LONG).show(); + } else { + Toast.makeText(getApplicationContext(), "You denied permission.", Toast.LENGTH_LONG).show(); + } + } + } +} diff --git a/ContactsReading/app/src/main/java/com/glowroad/contactsreading/DataDTO.java b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/DataDTO.java new file mode 100644 index 0000000..ae6dbb3 --- /dev/null +++ b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/DataDTO.java @@ -0,0 +1,4 @@ +package com.glowroad.contactsreading; + +class DataDTO { +} diff --git a/ContactsReading/app/src/main/java/com/glowroad/contactsreading/MainActivity.java b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/MainActivity.java new file mode 100644 index 0000000..6382243 --- /dev/null +++ b/ContactsReading/app/src/main/java/com/glowroad/contactsreading/MainActivity.java @@ -0,0 +1,192 @@ +package com.glowroad.contactsreading; + +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.ContactsContract; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.Toast; + +import java.util.ArrayList; +import java.util.List; + +public class MainActivity extends AppCompatActivity { + // Store all phone contacts list. + // Each String format is " DisplayName \r\n Phone Number \r\n Phone Type " ( Jerry \r\n 111111 \r\n Home) . + private List phoneContactsList = new ArrayList(); + + // This is the phone contacts list view's data adapter. + private ArrayAdapter contactsListDataAdapter; + + ListView contactsListView = null; + + private int PERMISSION_REQUEST_CODE_READ_CONTACTS = 1; + + private int PERMISSION_REQUEST_CODE_WRITE_CONTACTS = 2; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + // Get contacts list view. + contactsListView = (ListView) findViewById(R.id.display_phone_ocntacts_list_view); + // Create the list view data adapter. + contactsListDataAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, phoneContactsList); + // Set data adapter to the list view. + contactsListView.setAdapter(contactsListDataAdapter); + + // Click this button start add phone contact activity. + Button addPhoneContactsButton = (Button) findViewById(R.id.add_phone_contacts_button); + addPhoneContactsButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (!hasPhoneContactsPermission(Manifest.permission.WRITE_CONTACTS)) { + requestPermission(Manifest.permission.WRITE_CONTACTS, PERMISSION_REQUEST_CODE_WRITE_CONTACTS); + } else { + AddPhoneActivity.start(getApplicationContext()); + } + } + }); + + // Click this button to get and display phone contacts in the list view. + Button readPhoneContactsButton = (Button) findViewById(R.id.read_phone_contacts_button); + readPhoneContactsButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (!hasPhoneContactsPermission(Manifest.permission.READ_CONTACTS)) { + requestPermission(Manifest.permission.READ_CONTACTS, PERMISSION_REQUEST_CODE_READ_CONTACTS); + } else { + readPhoneContacts(); + } + } + }); + + Button contactsButton = (Button) findViewById(R.id.contacts_button); + contactsButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (!hasPhoneContactsPermission(Manifest.permission.READ_CONTACTS)) { + requestPermission(Manifest.permission.READ_CONTACTS, PERMISSION_REQUEST_CODE_READ_CONTACTS); + } else { + startActivity(new Intent(MainActivity.this,ContactOperationActivity.class)); + } + } + }); + } + + // Check whether user has phone contacts manipulation permission or not. + private boolean hasPhoneContactsPermission(String permission) { + boolean ret = false; + + // If android sdk version is bigger than 23 the need to check run time permission. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + // return phone read contacts permission grant status. + int hasPermission = ContextCompat.checkSelfPermission(getApplicationContext(), permission); + // If permission is granted then return true. + if (hasPermission == PackageManager.PERMISSION_GRANTED) { + ret = true; + } + } else { + ret = true; + } + return ret; + } + + // Request a runtime permission to app user. + private void requestPermission(String permission, int requestCode) { + String requestPermissionArray[] = {permission}; + ActivityCompat.requestPermissions(this, requestPermissionArray, requestCode); + } + + // After user select Allow or Deny button in request runtime permission dialog + // , this method will be invoked. + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + int length = grantResults.length; + if (length > 0) { + int grantResult = grantResults[0]; + + if (grantResult == PackageManager.PERMISSION_GRANTED) { + + if (requestCode == PERMISSION_REQUEST_CODE_READ_CONTACTS) { + // If user grant read contacts permission. + readPhoneContacts(); + } else if (requestCode == PERMISSION_REQUEST_CODE_WRITE_CONTACTS) { + // If user grant write contacts permission then start add phone contact activity. + AddPhoneActivity.start(getApplicationContext()); + } + } else { + Toast.makeText(getApplicationContext(), "You denied permission.", Toast.LENGTH_LONG).show(); + } + } + } + + // Read and display android phone contacts in list view. + private void readPhoneContacts() { + + // First empty current phone contacts list data. + int size = phoneContactsList.size(); + for (int i = 0; i < size; i++) { + phoneContactsList.remove(i); + i--; + size = phoneContactsList.size(); + } + + // Get query phone contacts cursor object. + Uri readContactsUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; + Cursor cursor = getContentResolver().query(readContactsUri, null, null, null, null); + + if (cursor != null) { + cursor.moveToFirst(); + + // Loop in the phone contacts cursor to add each contacts in phoneContactsList. + do { + // Get contact display name. + int displayNameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); + String userDisplayName = cursor.getString(displayNameIndex); + + // Get contact phone number. + int phoneNumberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); + String phoneNumber = cursor.getString(phoneNumberIndex); + + // Get contact phone type. + String phoneTypeStr = "Mobile"; + int phoneTypeColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE); + int phoneTypeInt = cursor.getInt(phoneTypeColumnIndex); + if (phoneTypeInt == ContactsContract.CommonDataKinds.Phone.TYPE_HOME) { + phoneTypeStr = "Home"; + } else if (phoneTypeInt == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) { + phoneTypeStr = "Mobile"; + } else if (phoneTypeInt == ContactsContract.CommonDataKinds.Phone.TYPE_WORK) { + phoneTypeStr = "Work"; + } + + StringBuffer contactStringBuf = new StringBuffer(); + contactStringBuf.append(userDisplayName); + contactStringBuf.append("\r\n"); + contactStringBuf.append(phoneNumber); + contactStringBuf.append("\r\n"); + contactStringBuf.append(phoneTypeStr); + + phoneContactsList.add(contactStringBuf.toString()); + } while (cursor.moveToNext()); + + // Refresh the listview to display read out phone contacts. + contactsListDataAdapter.notifyDataSetChanged(); + } + } +} diff --git a/ContactsReading/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/ContactsReading/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/ContactsReading/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/ContactsReading/app/src/main/res/drawable/ic_launcher_background.xml b/ContactsReading/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/ContactsReading/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ContactsReading/app/src/main/res/layout/activity_add_phone.xml b/ContactsReading/app/src/main/res/layout/activity_add_phone.xml new file mode 100644 index 0000000..e0d7963 --- /dev/null +++ b/ContactsReading/app/src/main/res/layout/activity_add_phone.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +