From ce89cfa4b8201d3d9b11397edb25224e1abb23e9 Mon Sep 17 00:00:00 2001 From: saran2020 Date: Sun, 14 Jan 2018 22:22:47 +0530 Subject: [PATCH 01/25] Updated: Made all model class as data class --- .../GetterMethodNotFoundException.kt | 3 +- .../PrimaryKeyItemNotFoundException.kt | 6 ++++ .../Exception/SchemaNotFoundException.kt | 5 ++- .../saran2020/realmbrowser/GetFields.kt | 10 ++++-- .../saran2020/realmbrowser/model/ClassItem.kt | 11 +----- .../saran2020/realmbrowser/model/FieldItem.kt | 13 +------ .../realmbrowser/model/ObjectType.kt | 35 +++++++------------ .../saran2020/realmbrowser/model/QueryItem.kt | 4 ++- 8 files changed, 34 insertions(+), 53 deletions(-) create mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/Exception/PrimaryKeyItemNotFoundException.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/GetterMethodNotFoundException.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/GetterMethodNotFoundException.kt index 7eb71bb..691df7f 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/GetterMethodNotFoundException.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/GetterMethodNotFoundException.kt @@ -3,5 +3,4 @@ package com.github.saran2020.realmbrowser.Exception /** * Created by Saran Sankaran on 1/13/18. */ -class GetterMethodNotFoundException(msg: String) : Exception(msg) { -} \ No newline at end of file +class GetterMethodNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/PrimaryKeyItemNotFoundException.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/PrimaryKeyItemNotFoundException.kt new file mode 100644 index 0000000..3b0d9de --- /dev/null +++ b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/PrimaryKeyItemNotFoundException.kt @@ -0,0 +1,6 @@ +package com.github.saran2020.realmbrowser.Exception + +/** + * Created by Saran Sankaran on 1/13/18. + */ +class PrimaryKeyItemNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/SchemaNotFoundException.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/SchemaNotFoundException.kt index e10efba..a528bf9 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/SchemaNotFoundException.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/SchemaNotFoundException.kt @@ -1,7 +1,6 @@ package com.github.saran2020.realmbrowser.Exception /** - * Created by Saran Sankaran on 1/13/18. + * Created by Saran Sankaran on 1/14/18. */ -class SchemaNotFoundException(msg: String) : Exception(msg) { -} \ No newline at end of file +class SchemaNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt index dbbb68c..1d8e1ec 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt @@ -4,6 +4,7 @@ import android.os.AsyncTask import android.os.Bundle import android.util.Log import com.github.saran2020.realmbrowser.Exception.GetterMethodNotFoundException +import com.github.saran2020.realmbrowser.Exception.PrimaryKeyItemNotFoundException import com.github.saran2020.realmbrowser.Exception.SchemaNotFoundException import com.github.saran2020.realmbrowser.model.ClassItem import com.github.saran2020.realmbrowser.model.FieldItem @@ -139,7 +140,7 @@ class GetFields { val schema = getClassSchema(resultInstance) val primaryKeyFieldName = schema.primaryKey - var primaryKeyItem = FieldItem() + var primaryKeyItem: FieldItem? = null val fieldItems = arrayListOf() // invoke all getters for the instance @@ -154,6 +155,11 @@ class GetFields { } } + if (primaryKeyItem == null) { + // TODO: Improve exception message + throw PrimaryKeyItemNotFoundException("Field primary key not found") + } + return ClassItem(primaryKeyItem, fieldItems) } @@ -177,7 +183,7 @@ class GetFields { } } - return FieldItem(getter.key, data, fieldType) + return FieldItem(getter.key, fieldType, data) } override fun onPostExecute(result: List?) { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/model/ClassItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/model/ClassItem.kt index dd809fe..aa30113 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/model/ClassItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/model/ClassItem.kt @@ -5,13 +5,4 @@ package com.github.saran2020.realmbrowser.model * * Created by Saran Sankaran on 1/13/18. */ -class ClassItem() { - - lateinit var primaryKey: FieldItem - lateinit var fieldsList: List - - constructor(primaryKey: FieldItem, fieldsList: List) : this() { - this.primaryKey = primaryKey - this.fieldsList = fieldsList - } -} \ No newline at end of file +data class ClassItem(val primaryKey: FieldItem, val fieldsList: List) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/model/FieldItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/model/FieldItem.kt index 69d0d43..2228c98 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/model/FieldItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/model/FieldItem.kt @@ -7,15 +7,4 @@ import io.realm.RealmFieldType * * A result item will contain the type and value of the field. */ -class FieldItem() { - - lateinit var name: String - lateinit var type: RealmFieldType - var value: Any? = null - - constructor(fieldName: String, fieldValue: Any?, fieldType: RealmFieldType) : this() { - this.name = fieldName - this.value = fieldValue - this.type = fieldType - } -} \ No newline at end of file +data class FieldItem(val name: String, val type: RealmFieldType, val value: Any?) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/model/ObjectType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/model/ObjectType.kt index e094016..49053da 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/model/ObjectType.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/model/ObjectType.kt @@ -7,28 +7,17 @@ import io.realm.RealmFieldType * of storing the exact value, we store this value instead. This will help us in handling the click on * this item in table view * + * ctor + * @param fieldText The text that will be displayed in table view + * @param parentPrimaryKeyFieldName Stores the parents primary key field name. This will be used + * to data when the object is clicked in table view and we have to display the data. + * @param parentPrimaryKeyFieldName Primary key type of parent + * @param parentPrimaryKeyValue Value of primary key of parent, this will be used to display the + * data when this item is clicked in table view + * * Created by its me on 13-Jan-18. */ -class ObjectType() { - - lateinit var fieldText: String - lateinit var parentPrimaryKeyFieldName: String - lateinit var parentPrimaryKeyType: RealmFieldType - var parentPrimaryKeyValue: Any? = null - - /** - * ctor - * @param fieldText The text that will be displayed in table view - * @param parentPrimaryKeyFieldName Stores the parents primary key field name. This will be used - * to data when the object is clicked in table view and we have to display the data. - * @param parentPrimaryKeyFieldName Primary key type of parent - * @param parentPrimaryKeyValue Value of primary key of parent, this will be used to display the - * data when this item is clicked in table view - */ - constructor(fieldText: String, parentPrimaryKeyFieldName: String, parentPrimaryKeyType: RealmFieldType, parentPrimaryKeyValue: Any?) : this() { - this.fieldText = fieldText - this.parentPrimaryKeyFieldName = parentPrimaryKeyFieldName - this.parentPrimaryKeyType = parentPrimaryKeyType - this.parentPrimaryKeyValue = parentPrimaryKeyValue - } -} \ No newline at end of file +data class ObjectType(val fieldText: String, + val parentPrimaryKeyFieldName: String, + val parentPrimaryKeyType: RealmFieldType, + val parentPrimaryKeyValue: Any?) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/model/QueryItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/model/QueryItem.kt index bccca88..7ba2099 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/model/QueryItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/model/QueryItem.kt @@ -5,4 +5,6 @@ import java.util.* /** * Created by its me on 02-Jan-18. */ -class QueryItem(var type: Byte, var queryList: LinkedList, var queryValues: LinkedList) \ No newline at end of file +data class QueryItem(var type: Byte, + var queryList: LinkedList, + var queryValues: LinkedList) \ No newline at end of file From a49777363f49f96954a4bc2bd191bdf30c7fd6ff Mon Sep 17 00:00:00 2001 From: saran2020 Date: Sun, 14 Jan 2018 22:34:19 +0530 Subject: [PATCH 02/25] Added: Added a ActivityHelper for startActivity calls --- .../saran2020/realmbrowser/ActivityHelper.kt | 17 +++++++++++++++++ .../saran2020/realmbrowser/MainActivity.kt | 4 ++-- .../saran2020/realmbrowser/ResultActivity.kt | 11 ----------- 3 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt new file mode 100644 index 0000000..86eb1ea --- /dev/null +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -0,0 +1,17 @@ +package com.github.saran2020.realmbrowser + +import android.content.Context +import android.content.Intent + +/** + * Helper class to store activity related stuff + * Created by its me on 14-Jan-18. + */ + +// TODO: Review if the find parm is required +fun startResultActivity(context: Context, className: String, find: Byte){ + val intent = Intent(context, ResultActivity::class.java) + intent.putExtra(EXTRA_CLASS_NAME, className) + intent.putExtra(EXTRA_FIND, find) + context.startActivity(intent) +} \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt index cc914e8..b3fc55b 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt @@ -102,8 +102,8 @@ class MainActivity : AppCompatActivity() { when (this@MainActivity.recyclerFindAdapter.selectedItem) { NO_ITEM_SELECTED -> this@MainActivity.recyclerFindAdapter.selectedItem - FIND_ALL -> ResultActivity.startActivity(this, fullClassName, FIND_ALL) - FIND_FIRST -> ResultActivity.startActivity(this, fullClassName, FIND_FIRST) + FIND_ALL -> startResultActivity(this, fullClassName, FIND_ALL) + FIND_FIRST -> startResultActivity(this, fullClassName, FIND_FIRST) } } } \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt index c9a57f8..c1005ba 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt @@ -25,17 +25,6 @@ class ResultActivity : AppCompatActivity() { private lateinit var linearResultHeader: LinearLayout private lateinit var recyclerResults: RecyclerView - companion object { - // TODO: Review if the find parm is required - fun startActivity(context: Context, className: String, find: Byte) { - - val intent = Intent(context, ResultActivity::class.java) - intent.putExtra(EXTRA_CLASS_NAME, className) - intent.putExtra(EXTRA_FIND, find) - context.startActivity(intent) - } - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_result_library) From db3c41d129a09ea49a50caa30f260b8b871ae5e9 Mon Sep 17 00:00:00 2001 From: saran2020 Date: Mon, 15 Jan 2018 00:02:48 +0530 Subject: [PATCH 03/25] Updated: Implemented for onCLick for object types. --- .../saran2020/realmbrowser/ActivityHelper.kt | 10 ++++-- .../saran2020/realmbrowser/RecyclerAdapter.kt | 27 +++++++++++++++- .../saran2020/realmbrowser/ViewHelper.kt | 31 +++++++++++++------ 3 files changed, 54 insertions(+), 14 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt index 86eb1ea..c58922f 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -2,16 +2,20 @@ package com.github.saran2020.realmbrowser import android.content.Context import android.content.Intent +import com.github.saran2020.realmbrowser.model.ObjectType /** * Helper class to store activity related stuff * Created by its me on 14-Jan-18. */ - -// TODO: Review if the find parm is required -fun startResultActivity(context: Context, className: String, find: Byte){ +fun startResultActivity(context: Context, className: String, find: Byte) { val intent = Intent(context, ResultActivity::class.java) intent.putExtra(EXTRA_CLASS_NAME, className) intent.putExtra(EXTRA_FIND, find) context.startActivity(intent) +} + +fun startResultActivity(context: Context, data: ObjectType) { + val intent = Intent(context, ResultActivity::class.java) + context.startActivity(intent) } \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt index f49ae7f..2ede98d 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt @@ -4,19 +4,44 @@ import android.content.Context import android.os.Build import android.support.annotation.ColorInt import android.support.v7.widget.RecyclerView +import android.util.Log +import android.view.View import android.view.ViewGroup import android.widget.LinearLayout import com.github.saran2020.realmbrowser.model.ClassItem +import com.github.saran2020.realmbrowser.model.ObjectType /** * Created by its me on 08-Jan-18. */ class RecyclerAdapter(private val context: Context, private val items: List) : RecyclerView.Adapter() { + val TAG = RecyclerAdapter::class.java.canonicalName + private val size: Int = items[0].fieldsList.size + 1 @ColorInt private val oddColor: Int @ColorInt private val evenColor: Int + private val onObjectClickListener = View.OnClickListener { view: View? -> + + // tag is of format "rowPos|colPos" + val tag = view?.tag.toString().split("|") + .map { it.toInt() }.toList() + + val item = items[tag[0]] + val fieldItem = if (tag[1] == 0) { + // position 0 is primary key + item.primaryKey.value as ObjectType + } else { + // pos 1 to fieldsList.size is occupied by other field items hence tag[1] - 1 + item.fieldsList[tag[1] - 1].value as ObjectType + } + + Log.d(TAG, "Received click for pos ${tag[0]}|${tag[1]} item = $fieldItem") + +// startResultActivity(context, fieldItem) + } + init { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { oddColor = context.getColor(R.color.tableBackroundOdd) @@ -34,7 +59,7 @@ class RecyclerAdapter(private val context: Context, private val items: List { - isTextHyperlinkSylable = true + isTextHyperlinkStyleable = true (field.value as ObjectType).fieldText } RealmFieldType.LIST -> { - isTextHyperlinkSylable = true + isTextHyperlinkStyleable = true field.value as String } @@ -245,8 +252,8 @@ private fun setTextToView(context: Context, textView: TextView, field: FieldItem } } - if (isTextHyperlinkSylable) { - makeTextViewHyperlink(textView, fieldData) + if (isTextHyperlinkStyleable) { + makeTextViewHyperlink(textView, fieldData, objectClickListener, "$rowPos|$viewPos") } else { Log.d(TAG, "data = $fieldData") textView.text = fieldData @@ -262,11 +269,15 @@ private fun setStyleToText(context: Context, textView: TextView, @StyleRes resId } } -private fun makeTextViewHyperlink(textView: TextView, text: String) { +private fun makeTextViewHyperlink(textView: TextView, text: String, + objectClickListener: View.OnClickListener, tag: String) { val ssb = SpannableStringBuilder(text) ssb.setSpan(URLSpan("#"), 0, ssb.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(ssb, TextView.BufferType.SPANNABLE) + + textView.tag = tag + textView.setOnClickListener(objectClickListener) } private fun getTextViewWidth(context: Context): Int { From 760925105b2c893aa792bf8b7cd198fa9fd9bac0 Mon Sep 17 00:00:00 2001 From: saran2020 Date: Mon, 15 Jan 2018 01:37:14 +0530 Subject: [PATCH 04/25] Updated: pass data to ResultActivity for showing Object type --- .../saran2020/realmbrowser/ActivityHelper.kt | 25 +++++++++++++++++++ .../saran2020/realmbrowser/Constants.kt | 6 +++++ .../saran2020/realmbrowser/GetFields.kt | 4 ++- .../saran2020/realmbrowser/RecyclerAdapter.kt | 3 +-- .../realmbrowser/model/ObjectType.kt | 1 + 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt index c58922f..4d5754d 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -3,6 +3,7 @@ package com.github.saran2020.realmbrowser import android.content.Context import android.content.Intent import com.github.saran2020.realmbrowser.model.ObjectType +import io.realm.RealmFieldType /** * Helper class to store activity related stuff @@ -17,5 +18,29 @@ fun startResultActivity(context: Context, className: String, find: Byte) { fun startResultActivity(context: Context, data: ObjectType) { val intent = Intent(context, ResultActivity::class.java) + intent.putExtra(EXTRA_PARENT_CLASS_NAME, data.parentClassName) + intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_NAME, data.parentPrimaryKeyFieldName) + intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyType) + + when (data.parentPrimaryKeyType) { + RealmFieldType.BOOLEAN -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue as Boolean) + RealmFieldType.FLOAT -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue as Float) + RealmFieldType.DOUBLE -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue as Double) + + RealmFieldType.STRING -> { + intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue as String) + } + + RealmFieldType.INTEGER -> { + when (data.parentPrimaryKeyValue) { + is Long -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue) + is Int -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue) + is Short -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue) + is Byte -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue) + else -> ERROR_TEXT + } + } + } + context.startActivity(intent) } \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt index 2867bbf..073f7c5 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt @@ -1,4 +1,5 @@ @file:JvmName("Constants") + package com.github.saran2020.realmbrowser /** @@ -11,6 +12,11 @@ const val NO_ITEM_SELECTED: Byte = -1 const val EXTRA_CLASS_NAME = "EXTRA_CLASS_NAME" const val EXTRA_FIND = "EXTRA_FIND" +const val EXTRA_PARENT_CLASS_NAME = "EXTRA_PARENT_CLASS_NAME" +const val EXTRA_PARENT_PRIMARY_KEY_NAME = "EXTRA_PARENT_PRIMARY_KEY_NAME" +const val EXTRA_PARENT_PRIMARY_KEY_TYPE = "EXTRA_PARENT_PRIMARY_KEY_TYPE" +const val EXTRA_PARENT_PRIMARY_KEY_VALUE = "EXTRA_PARENT_PRIMARY_KEY_VALUE" + // Query Types const val QUERY_EQUAL_TO: Byte = 50 diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt index 1d8e1ec..2feaa95 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt @@ -163,7 +163,8 @@ class GetFields { return ClassItem(primaryKeyItem, fieldItems) } - private fun getFieldItem(resultInstance: RealmObject, schema: RealmObjectSchema, getter: Map.Entry): FieldItem { + private fun getFieldItem(resultInstance: RealmObject, schema: RealmObjectSchema, + getter: Map.Entry): FieldItem { val fieldName = getter.key val fieldType = schema.getFieldType(fieldName) @@ -177,6 +178,7 @@ class GetFields { val parentPrimaryKeyFieldType = schema.getFieldType(parentPrimaryKeyFieldName) val parentPrimaryKeyFieldValue = findGetter(schema, resultInstance::class.java, parentPrimaryKeyFieldName)?.invoke(resultInstance) data = ObjectType(data.javaClass.simpleName.removeSuffix("RealmProxy"), + schema.className, parentPrimaryKeyFieldName, parentPrimaryKeyFieldType, parentPrimaryKeyFieldValue) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt index 2ede98d..8aded03 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt @@ -38,8 +38,7 @@ class RecyclerAdapter(private val context: Context, private val items: List Date: Mon, 15 Jan 2018 17:49:01 +0530 Subject: [PATCH 05/25] Updated: Made class name accept without package name. --- .../saran2020/realmbrowser/GetFields.kt | 10 ++++++--- .../saran2020/realmbrowser/MainActivity.kt | 21 ++++--------------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt index 2feaa95..440f9ff 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt @@ -52,9 +52,13 @@ class GetFields { //TODO: Handle class cast exception of casting to Class private fun getRealmQuery(): RealmQuery<*> { - val fullClassName = bundle.getString(EXTRA_CLASS_NAME) - val className = Class.forName(fullClassName) as Class - val query = realm.where(className) + + val selectedClass = bundle.getString(EXTRA_CLASS_NAME) + val selectedClassInstance = realm.configuration.realmObjectClasses.single { + it.simpleName.equals(selectedClass, true) + } + + val query = realm.where(selectedClassInstance) return query } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt index b3fc55b..15c1e47 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt @@ -3,8 +3,6 @@ package com.github.saran2020.realmbrowser import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.support.v7.widget.RecyclerView -import android.text.Editable -import android.text.TextWatcher import android.view.View import android.widget.* import com.xiaofeng.flowlayoutmanager.FlowLayoutManager @@ -51,7 +49,6 @@ class MainActivity : AppCompatActivity() { textQuery = findViewById(R.id.query_library) buttonFetch = findViewById(R.id.buttonFetch_library) - editClassName.addTextChangedListener(textChangeListener) imageAddQuery.setOnClickListener(onAddQueryClickListener) buttonFetch.setOnClickListener(onFetchClickListener) @@ -81,29 +78,19 @@ class MainActivity : AppCompatActivity() { FIND_FIRST_STRING) } - // listeners - private var textChangeListener = object : TextWatcher { - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} - override fun afterTextChanged(s: Editable?) { - if (s?.isEmpty() == true) textPackageName.text = "" - textPackageName.text = String.format("%s.%s", appPackageName, s) - } - } - private val onAddQueryClickListener = View.OnClickListener { Toast.makeText(this@MainActivity, "Add Clicked", Toast.LENGTH_SHORT).show() } private var onFetchClickListener = View.OnClickListener { - var fullClassName = textPackageName.text.toString() - if (fullClassName.isEmpty()) return@OnClickListener + val className = editClassName.text.toString() + if (className.isEmpty()) return@OnClickListener when (this@MainActivity.recyclerFindAdapter.selectedItem) { NO_ITEM_SELECTED -> this@MainActivity.recyclerFindAdapter.selectedItem - FIND_ALL -> startResultActivity(this, fullClassName, FIND_ALL) - FIND_FIRST -> startResultActivity(this, fullClassName, FIND_FIRST) + FIND_ALL -> startResultActivity(this, className, FIND_ALL) + FIND_FIRST -> startResultActivity(this, className, FIND_FIRST) } } } \ No newline at end of file From b7ec1c5dc4044d8026487ee7c5c25330c604784a Mon Sep 17 00:00:00 2001 From: Saran Date: Mon, 15 Jan 2018 17:52:37 +0530 Subject: [PATCH 06/25] Added: Added a data package and moved model class into the data package --- .../com/github/saran2020/realmbrowser/ActivityHelper.kt | 2 +- .../com/github/saran2020/realmbrowser/QueryAdapter.kt | 2 +- .../com/github/saran2020/realmbrowser/RecyclerAdapter.kt | 4 ++-- .../com/github/saran2020/realmbrowser/ResultActivity.kt | 7 +++---- .../java/com/github/saran2020/realmbrowser/ViewHelper.kt | 6 +++--- .../{ => data}/FieldsTaskCompleteCallback.kt | 5 ++--- .../saran2020/realmbrowser/{ => data}/GetFields.kt | 9 +++++---- .../saran2020/realmbrowser/{ => data}/model/ClassItem.kt | 2 +- .../saran2020/realmbrowser/{ => data}/model/FieldItem.kt | 2 +- .../realmbrowser/{ => data}/model/ObjectType.kt | 2 +- .../saran2020/realmbrowser/{ => data}/model/QueryItem.kt | 2 +- 11 files changed, 21 insertions(+), 22 deletions(-) rename library/src/main/java/com/github/saran2020/realmbrowser/{ => data}/FieldsTaskCompleteCallback.kt (50%) rename library/src/main/java/com/github/saran2020/realmbrowser/{ => data}/GetFields.kt (96%) rename library/src/main/java/com/github/saran2020/realmbrowser/{ => data}/model/ClassItem.kt (81%) rename library/src/main/java/com/github/saran2020/realmbrowser/{ => data}/model/FieldItem.kt (80%) rename library/src/main/java/com/github/saran2020/realmbrowser/{ => data}/model/ObjectType.kt (95%) rename library/src/main/java/com/github/saran2020/realmbrowser/{ => data}/model/QueryItem.kt (80%) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt index 4d5754d..9688055 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -2,7 +2,7 @@ package com.github.saran2020.realmbrowser import android.content.Context import android.content.Intent -import com.github.saran2020.realmbrowser.model.ObjectType +import com.github.saran2020.realmbrowser.data.model.ObjectType import io.realm.RealmFieldType /** diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt index 3c41efc..60b24c7 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt @@ -6,7 +6,7 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView -import com.github.saran2020.realmbrowser.model.QueryItem +import com.github.saran2020.realmbrowser.data.model.QueryItem /** * Created by its me on 11-Nov-17. diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt index 8aded03..471e2ad 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt @@ -8,8 +8,8 @@ import android.util.Log import android.view.View import android.view.ViewGroup import android.widget.LinearLayout -import com.github.saran2020.realmbrowser.model.ClassItem -import com.github.saran2020.realmbrowser.model.ObjectType +import com.github.saran2020.realmbrowser.data.model.ClassItem +import com.github.saran2020.realmbrowser.data.model.ObjectType /** * Created by its me on 08-Jan-18. diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt index c1005ba..17af029 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt @@ -1,7 +1,5 @@ package com.github.saran2020.realmbrowser -import android.content.Context -import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.support.v7.widget.LinearLayoutManager @@ -10,8 +8,9 @@ import android.view.View import android.widget.HorizontalScrollView import android.widget.LinearLayout import android.widget.ProgressBar -import com.github.saran2020.realmbrowser.model.ClassItem -import com.github.saran2020.realmbrowser.model.FieldItem +import com.github.saran2020.realmbrowser.data.FieldsTaskCompleteCallback +import com.github.saran2020.realmbrowser.data.GetFields +import com.github.saran2020.realmbrowser.data.model.ClassItem /** * Created by Saran Sankaran on 11/10/17. diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt index 46390fa..20edd34 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt @@ -15,9 +15,9 @@ import android.widget.FrameLayout import android.widget.GridLayout import android.widget.LinearLayout import android.widget.TextView -import com.github.saran2020.realmbrowser.model.ClassItem -import com.github.saran2020.realmbrowser.model.FieldItem -import com.github.saran2020.realmbrowser.model.ObjectType +import com.github.saran2020.realmbrowser.data.model.ClassItem +import com.github.saran2020.realmbrowser.data.model.FieldItem +import com.github.saran2020.realmbrowser.data.model.ObjectType import io.realm.RealmFieldType /** diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/FieldsTaskCompleteCallback.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt similarity index 50% rename from library/src/main/java/com/github/saran2020/realmbrowser/FieldsTaskCompleteCallback.kt rename to library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt index 1426caa..5d692d3 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/FieldsTaskCompleteCallback.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt @@ -1,7 +1,6 @@ -package com.github.saran2020.realmbrowser +package com.github.saran2020.realmbrowser.data -import com.github.saran2020.realmbrowser.model.ClassItem -import com.github.saran2020.realmbrowser.model.FieldItem +import com.github.saran2020.realmbrowser.data.model.ClassItem /** * Created by Saran Sankaran on 1/11/18. diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt similarity index 96% rename from library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt rename to library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index 440f9ff..8999689 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -1,14 +1,15 @@ -package com.github.saran2020.realmbrowser +package com.github.saran2020.realmbrowser.data import android.os.AsyncTask import android.os.Bundle import android.util.Log +import com.github.saran2020.realmbrowser.* import com.github.saran2020.realmbrowser.Exception.GetterMethodNotFoundException import com.github.saran2020.realmbrowser.Exception.PrimaryKeyItemNotFoundException import com.github.saran2020.realmbrowser.Exception.SchemaNotFoundException -import com.github.saran2020.realmbrowser.model.ClassItem -import com.github.saran2020.realmbrowser.model.FieldItem -import com.github.saran2020.realmbrowser.model.ObjectType +import com.github.saran2020.realmbrowser.data.model.ClassItem +import com.github.saran2020.realmbrowser.data.model.FieldItem +import com.github.saran2020.realmbrowser.data.model.ObjectType import io.realm.* import java.lang.reflect.Method diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/model/ClassItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ClassItem.kt similarity index 81% rename from library/src/main/java/com/github/saran2020/realmbrowser/model/ClassItem.kt rename to library/src/main/java/com/github/saran2020/realmbrowser/data/model/ClassItem.kt index aa30113..c5bd816 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/model/ClassItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ClassItem.kt @@ -1,4 +1,4 @@ -package com.github.saran2020.realmbrowser.model +package com.github.saran2020.realmbrowser.data.model /** * This class represents a realm model class and Primary key item is not included in the fields list diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/model/FieldItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt similarity index 80% rename from library/src/main/java/com/github/saran2020/realmbrowser/model/FieldItem.kt rename to library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt index 2228c98..93b3df8 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/model/FieldItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt @@ -1,4 +1,4 @@ -package com.github.saran2020.realmbrowser.model +package com.github.saran2020.realmbrowser.data.model import io.realm.RealmFieldType diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/model/ObjectType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt similarity index 95% rename from library/src/main/java/com/github/saran2020/realmbrowser/model/ObjectType.kt rename to library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt index a158083..46c429e 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/model/ObjectType.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt @@ -1,4 +1,4 @@ -package com.github.saran2020.realmbrowser.model +package com.github.saran2020.realmbrowser.data.model import io.realm.RealmFieldType diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/model/QueryItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt similarity index 80% rename from library/src/main/java/com/github/saran2020/realmbrowser/model/QueryItem.kt rename to library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt index 7ba2099..a4c14de 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/model/QueryItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt @@ -1,4 +1,4 @@ -package com.github.saran2020.realmbrowser.model +package com.github.saran2020.realmbrowser.data.model import java.util.* From a7101a956681961b8f91ece8735ace8f2f0bbb0d Mon Sep 17 00:00:00 2001 From: Saran Date: Mon, 15 Jan 2018 18:14:05 +0530 Subject: [PATCH 07/25] Updated: Added ObjectInfo to ObjectType data class --- .../saran2020/realmbrowser/ViewHelper.kt | 2 +- .../saran2020/realmbrowser/data/GetFields.kt | 7 +++++-- .../realmbrowser/data/model/ObjectInfo.kt | 12 +++++++++++ .../realmbrowser/data/model/ObjectType.kt | 20 +++++++++++++------ 4 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt index 20edd34..b5f0cc0 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt @@ -241,7 +241,7 @@ private fun setTextToView(context: Context, textView: TextView, field: FieldItem RealmFieldType.OBJECT -> { isTextHyperlinkStyleable = true - (field.value as ObjectType).fieldText + (field.value as ObjectType).displayText } RealmFieldType.LIST -> { isTextHyperlinkStyleable = true diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index 8999689..2cb6745 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -182,11 +182,14 @@ class GetFields { val parentPrimaryKeyFieldName = schema.primaryKey val parentPrimaryKeyFieldType = schema.getFieldType(parentPrimaryKeyFieldName) val parentPrimaryKeyFieldValue = findGetter(schema, resultInstance::class.java, parentPrimaryKeyFieldName)?.invoke(resultInstance) - data = ObjectType(data.javaClass.simpleName.removeSuffix("RealmProxy"), + + data = ObjectType( + data.javaClass.simpleName.removeSuffix("RealmProxy"), schema.className, parentPrimaryKeyFieldName, parentPrimaryKeyFieldType, - parentPrimaryKeyFieldValue) + parentPrimaryKeyFieldValue, + getter.value.name) } } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt new file mode 100644 index 0000000..5f9520a --- /dev/null +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt @@ -0,0 +1,12 @@ +package com.github.saran2020.realmbrowser.data.model + +import io.realm.RealmFieldType + +/** + * Created by Saran Sankaran on 1/15/18. + */ +data class ObjectInfo(val parentClassName: String, + val parentPrimaryKeyFieldName: String, + val parentPrimaryKeyType: RealmFieldType, + val parentPrimaryKeyValue: Any?, + val fieldGetterName: String) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt index 46c429e..abb9128 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt @@ -8,7 +8,7 @@ import io.realm.RealmFieldType * this item in table view * * ctor - * @param fieldText The text that will be displayed in table view + * @param displayText The text that will be displayed in table view * @param parentPrimaryKeyFieldName Stores the parents primary key field name. This will be used * to data when the object is clicked in table view and we have to display the data. * @param parentPrimaryKeyFieldName Primary key type of parent @@ -17,8 +17,16 @@ import io.realm.RealmFieldType * * Created by its me on 13-Jan-18. */ -data class ObjectType(val fieldText: String, - val parentClassName: String, - val parentPrimaryKeyFieldName: String, - val parentPrimaryKeyType: RealmFieldType, - val parentPrimaryKeyValue: Any?) \ No newline at end of file +data class ObjectType private constructor(val displayText: String) { + + lateinit var objectInfo: ObjectInfo + + constructor(displayText: String, + parentClassName: String, + parentPrimaryKeyFieldName: String, + parentPrimaryKeyType: RealmFieldType, + parentPrimaryKeyValue: Any?, + fieldGetterName: String) : this(displayText) { + objectInfo = ObjectInfo(parentClassName, parentPrimaryKeyFieldName, parentPrimaryKeyType, parentPrimaryKeyValue, fieldGetterName) + } +} \ No newline at end of file From 32ca86b26ef39602c09adc1e44940f7c186ed141 Mon Sep 17 00:00:00 2001 From: Saran Date: Mon, 15 Jan 2018 20:10:28 +0530 Subject: [PATCH 08/25] Updated: Made field type native int instead of RealmFieldType --- .../saran2020/realmbrowser/ActivityHelper.kt | 33 ++++++++++--------- .../saran2020/realmbrowser/data/GetFields.kt | 9 +++-- .../realmbrowser/data/model/ObjectInfo.kt | 2 +- .../realmbrowser/data/model/ObjectType.kt | 2 +- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt index 9688055..adfbbdf 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -18,25 +18,28 @@ fun startResultActivity(context: Context, className: String, find: Byte) { fun startResultActivity(context: Context, data: ObjectType) { val intent = Intent(context, ResultActivity::class.java) - intent.putExtra(EXTRA_PARENT_CLASS_NAME, data.parentClassName) - intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_NAME, data.parentPrimaryKeyFieldName) - intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyType) - when (data.parentPrimaryKeyType) { - RealmFieldType.BOOLEAN -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue as Boolean) - RealmFieldType.FLOAT -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue as Float) - RealmFieldType.DOUBLE -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue as Double) + val objectInfo = data.objectInfo - RealmFieldType.STRING -> { - intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue as String) + intent.putExtra(EXTRA_PARENT_CLASS_NAME, objectInfo.parentClassName) + intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_NAME, objectInfo.parentPrimaryKeyFieldName) + intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyType) + + when (objectInfo.parentPrimaryKeyType) { + RealmFieldType.BOOLEAN.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue as Boolean) + RealmFieldType.FLOAT.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue as Float) + RealmFieldType.DOUBLE.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue as Double) + + RealmFieldType.STRING.nativeValue -> { + intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue as String) } - RealmFieldType.INTEGER -> { - when (data.parentPrimaryKeyValue) { - is Long -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue) - is Int -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue) - is Short -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue) - is Byte -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, data.parentPrimaryKeyValue) + RealmFieldType.INTEGER.nativeValue -> { + when (objectInfo.parentPrimaryKeyValue) { + is Long -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue) + is Int -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue) + is Short -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue) + is Byte -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue) else -> ERROR_TEXT } } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index 2cb6745..41cc3c2 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -39,6 +39,8 @@ class GetFields { realm = Realm.getDefaultInstance() +// val queryResult = RealmQueryCreater(realm, bundle).getResult() + val query = getRealmQuery() return when (bundle.getByte(EXTRA_FIND)) { @@ -49,6 +51,7 @@ class GetFields { FIND_ALL -> findAll(query) else -> emptyList() } +// return emptyList() } //TODO: Handle class cast exception of casting to Class @@ -151,7 +154,7 @@ class GetFields { // invoke all getters for the instance for (getter in fieldGetters) { - val fieldItem = getFieldItem(resultInstance, schema, getter); + val fieldItem = getFieldItem(resultInstance, schema, getter) if (getter.key == primaryKeyFieldName) { primaryKeyItem = fieldItem @@ -175,6 +178,8 @@ class GetFields { val fieldType = schema.getFieldType(fieldName) var data = getter.value.invoke(resultInstance) + Log.d("Tag", "field name = $fieldName fieldtype name = ${fieldType.name} nativeValue = ${fieldType.nativeValue}") + if (data != null) { if (fieldType == RealmFieldType.OBJECT) { @@ -187,7 +192,7 @@ class GetFields { data.javaClass.simpleName.removeSuffix("RealmProxy"), schema.className, parentPrimaryKeyFieldName, - parentPrimaryKeyFieldType, + parentPrimaryKeyFieldType.nativeValue, parentPrimaryKeyFieldValue, getter.value.name) } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt index 5f9520a..d8ff31c 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt @@ -7,6 +7,6 @@ import io.realm.RealmFieldType */ data class ObjectInfo(val parentClassName: String, val parentPrimaryKeyFieldName: String, - val parentPrimaryKeyType: RealmFieldType, + val parentPrimaryKeyType: Int, val parentPrimaryKeyValue: Any?, val fieldGetterName: String) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt index abb9128..43d76f4 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt @@ -24,7 +24,7 @@ data class ObjectType private constructor(val displayText: String) { constructor(displayText: String, parentClassName: String, parentPrimaryKeyFieldName: String, - parentPrimaryKeyType: RealmFieldType, + parentPrimaryKeyType: Int, parentPrimaryKeyValue: Any?, fieldGetterName: String) : this(displayText) { objectInfo = ObjectInfo(parentClassName, parentPrimaryKeyFieldName, parentPrimaryKeyType, parentPrimaryKeyValue, fieldGetterName) From 16c673969238d0385b1be0010e9e9d00de490fb1 Mon Sep 17 00:00:00 2001 From: Saran Date: Mon, 15 Jan 2018 21:51:05 +0530 Subject: [PATCH 09/25] Updated: Click for realm Object will display containing data --- .../saran2020/realmbrowser/ActivityHelper.kt | 22 +++-- .../saran2020/realmbrowser/Constants.kt | 9 +- .../saran2020/realmbrowser/ResultActivity.kt | 2 +- .../saran2020/realmbrowser/data/GetFields.kt | 85 ++++++++++------- .../realmbrowser/data/RealmQueryCreater.kt | 92 +++++++++++++++++++ .../realmbrowser/data/model/QueryResult.kt | 17 ++++ 6 files changed, 185 insertions(+), 42 deletions(-) create mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt create mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt index adfbbdf..6f8c2b0 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -21,29 +21,33 @@ fun startResultActivity(context: Context, data: ObjectType) { val objectInfo = data.objectInfo - intent.putExtra(EXTRA_PARENT_CLASS_NAME, objectInfo.parentClassName) + intent.putExtra(EXTRA_CLASS_NAME, objectInfo.parentClassName) intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_NAME, objectInfo.parentPrimaryKeyFieldName) intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyType) + intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME, objectInfo.fieldGetterName) + // check type and insert value when (objectInfo.parentPrimaryKeyType) { - RealmFieldType.BOOLEAN.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue as Boolean) - RealmFieldType.FLOAT.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue as Float) - RealmFieldType.DOUBLE.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue as Double) + RealmFieldType.BOOLEAN.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_VALUE, objectInfo.parentPrimaryKeyValue as Boolean) + RealmFieldType.FLOAT.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_VALUE, objectInfo.parentPrimaryKeyValue as Float) + RealmFieldType.DOUBLE.nativeValue -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_VALUE, objectInfo.parentPrimaryKeyValue as Double) RealmFieldType.STRING.nativeValue -> { - intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue as String) + intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_VALUE, objectInfo.parentPrimaryKeyValue as String) } RealmFieldType.INTEGER.nativeValue -> { when (objectInfo.parentPrimaryKeyValue) { - is Long -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue) - is Int -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue) - is Short -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue) - is Byte -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyValue) + is Long -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_VALUE, objectInfo.parentPrimaryKeyValue) + is Int -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_VALUE, objectInfo.parentPrimaryKeyValue) + is Short -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_VALUE, objectInfo.parentPrimaryKeyValue) + is Byte -> intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_VALUE, objectInfo.parentPrimaryKeyValue) else -> ERROR_TEXT } } } + intent.putExtra(EXTRA_FIND, FIND_FIRST) + context.startActivity(intent) } \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt index 073f7c5..a7aaf6d 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt @@ -16,6 +16,7 @@ const val EXTRA_PARENT_CLASS_NAME = "EXTRA_PARENT_CLASS_NAME" const val EXTRA_PARENT_PRIMARY_KEY_NAME = "EXTRA_PARENT_PRIMARY_KEY_NAME" const val EXTRA_PARENT_PRIMARY_KEY_TYPE = "EXTRA_PARENT_PRIMARY_KEY_TYPE" const val EXTRA_PARENT_PRIMARY_KEY_VALUE = "EXTRA_PARENT_PRIMARY_KEY_VALUE" +const val EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME = "EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME" // Query Types const val QUERY_EQUAL_TO: Byte = 50 @@ -50,4 +51,10 @@ const val TYPE_REALM_OBJECT: Byte = -12 const val GETTER_PREFIX = "get" const val BOOLEAN_GETTER_PREFIX = "is" -const val ERROR_TEXT = "Some error occurred" \ No newline at end of file +const val ERROR_TEXT = "Some error occurred" + +// result types +const val RESULT_TYPE_EMPTY:Byte = 110 +const val RESULT_TYPE_OBJECT:Byte = 111 +const val RESULT_TYPE_LIST:Byte = 112 +const val RESULT_TYPE_REALM_RESULT:Byte = 113 \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt index 17af029..52302bd 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt @@ -62,7 +62,7 @@ class ResultActivity : AppCompatActivity() { override fun onFetchComplete(fields: List?) { super.onFetchComplete(fields) - if (fields == null) { + if (fields == null || fields.isEmpty()) { return } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index 41cc3c2..c02f6a3 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -3,10 +3,13 @@ package com.github.saran2020.realmbrowser.data import android.os.AsyncTask import android.os.Bundle import android.util.Log -import com.github.saran2020.realmbrowser.* import com.github.saran2020.realmbrowser.Exception.GetterMethodNotFoundException import com.github.saran2020.realmbrowser.Exception.PrimaryKeyItemNotFoundException import com.github.saran2020.realmbrowser.Exception.SchemaNotFoundException +import com.github.saran2020.realmbrowser.RESULT_TYPE_LIST +import com.github.saran2020.realmbrowser.RESULT_TYPE_OBJECT +import com.github.saran2020.realmbrowser.RESULT_TYPE_REALM_RESULT +import com.github.saran2020.realmbrowser.TAG import com.github.saran2020.realmbrowser.data.model.ClassItem import com.github.saran2020.realmbrowser.data.model.FieldItem import com.github.saran2020.realmbrowser.data.model.ObjectType @@ -39,50 +42,70 @@ class GetFields { realm = Realm.getDefaultInstance() -// val queryResult = RealmQueryCreater(realm, bundle).getResult() + val queryResult = RealmQueryCreater(realm, bundle).getResult() - val query = getRealmQuery() + if (queryResult.result == null) { + return emptyList() + } - return when (bundle.getByte(EXTRA_FIND)) { - FIND_FIRST -> { - val fieldItems = findFirst(query) + return when (queryResult.resultType) { + RESULT_TYPE_OBJECT -> { + val fieldItems = findFieldsFromInstance(queryResult.result as RealmObject) arrayListOf(fieldItems) } - FIND_ALL -> findAll(query) + RESULT_TYPE_REALM_RESULT -> { + findFieldsFromRealmResult(queryResult.result as RealmResults) + } + RESULT_TYPE_LIST -> { + findFieldsFromRealmList(queryResult.result as RealmList) + } else -> emptyList() } -// return emptyList() - } - - //TODO: Handle class cast exception of casting to Class - private fun getRealmQuery(): RealmQuery<*> { - val selectedClass = bundle.getString(EXTRA_CLASS_NAME) - val selectedClassInstance = realm.configuration.realmObjectClasses.single { - it.simpleName.equals(selectedClass, true) - } - - val query = realm.where(selectedClassInstance) - - return query +// val query = getRealmQuery() +// +// return when (bundle.getByte(EXTRA_FIND)) { +// FIND_FIRST -> { +// val fieldItems = findFirst(query) +// arrayListOf(fieldItems) +// } +// FIND_ALL -> findAll(query) +// else -> emptyList() +// } } - - private fun findFirst(query: RealmQuery<*>): ClassItem { - - val resultValue = query.findFirst() as RealmObject - return findFieldsOfInstance(resultValue) + private fun findFieldsFromRealmList(realmResults: RealmList): List { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } + // //TODO: Handle class cast exception of casting to Class +// private fun getRealmQuery(): RealmQuery<*> { +// +// val selectedClass = bundle.getString(EXTRA_CLASS_NAME) +// val selectedClassInstance = realm.configuration.realmObjectClasses.single { +// it.simpleName.equals(selectedClass, true) +// } +// +// val query = realm.where(selectedClassInstance) +// +// return query +// } +// +// +// private fun findFirst(query: RealmQuery<*>): ClassItem { +// +// val resultValue = query.findFirst() as RealmObject +// return findFieldsFromInstance(resultValue) +// } +// +// + private fun findFieldsFromRealmResult(realmResult: RealmResults): ArrayList { - private fun findAll(query: RealmQuery<*>): ArrayList { - - val realmResult: RealmResults = query.findAll() as RealmResults val getterMethods = findGetters(realmResult[0] as RealmObject) val result = arrayListOf() realmResult.forEach { - result.add(findFieldsOfInstance(it as RealmObject, getterMethods)) + result.add(findFieldsFromInstance(it as RealmObject, getterMethods)) } return result @@ -141,8 +164,8 @@ class GetFields { return resultClass.getMethod(getterMethodName) } - private fun findFieldsOfInstance(resultInstance: RealmObject, - fieldGetters: Map = findGetters(resultInstance)) + private fun findFieldsFromInstance(resultInstance: RealmObject, + fieldGetters: Map = findGetters(resultInstance)) : ClassItem { val schema = getClassSchema(resultInstance) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt new file mode 100644 index 0000000..3576995 --- /dev/null +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt @@ -0,0 +1,92 @@ +package com.github.saran2020.realmbrowser.data + +import android.os.Bundle +import com.github.saran2020.realmbrowser.* +import com.github.saran2020.realmbrowser.data.model.QueryResult +import io.realm.* + +/** + * Created by Saran Sankaran on 1/15/18. + */ +class RealmQueryCreater(private val realm: Realm, private val bundle: Bundle) { + + fun getResult(): QueryResult { + val query = getBaseQuery() + + val result = QueryResult() + val queryResult = when (bundle.getByte(EXTRA_FIND)) { + FIND_FIRST -> { + result.resultType = RESULT_TYPE_OBJECT + findFirst(query) + } + FIND_ALL -> { + result.resultType = RESULT_TYPE_REALM_RESULT + query.findAll() + } + else -> null + } + + if (bundle.containsKey(EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME) && queryResult != null) { + + val getterMethodName = bundle.getString(EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME) + val getterMethod = queryResult::class.java.getMethod(getterMethodName) + result.result = getterMethod.invoke(queryResult) + + if (getterMethod.returnType.isAssignableFrom(RealmList::class.java)) { + result.resultType = RESULT_TYPE_LIST + } else if (getterMethod.returnType.superclass == RealmObject::class.java) { + result.resultType = RESULT_TYPE_OBJECT + } + + } else { + result.result = queryResult + } + + return result + } + + private fun getBaseQuery(): RealmQuery<*> { + + val selectedClass = bundle.getString(EXTRA_CLASS_NAME) + val selectedClassInstance = realm.configuration.realmObjectClasses.single { + it.simpleName.equals(selectedClass, true) + } + + val query = realm.where(selectedClassInstance) + + return query + } + + + private fun findFirst(query: RealmQuery<*>): Any? { + + if (bundle.containsKey(EXTRA_PARENT_PRIMARY_KEY_VALUE)) { + + val primaryKeyFieldType = bundle.getInt(EXTRA_PARENT_PRIMARY_KEY_TYPE) + val primaryKeyFieldName = bundle.getString(EXTRA_PARENT_PRIMARY_KEY_NAME) + val primaryKeyValue = bundle.get(EXTRA_PARENT_PRIMARY_KEY_VALUE) + + when (primaryKeyFieldType) { + RealmFieldType.BOOLEAN.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Boolean) + RealmFieldType.FLOAT.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Float) + RealmFieldType.DOUBLE.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Double) + + RealmFieldType.STRING.nativeValue -> { + query.equalTo(primaryKeyFieldName, primaryKeyValue as String) + } + + RealmFieldType.INTEGER.nativeValue -> { + when (primaryKeyValue) { + is Long -> query.equalTo(primaryKeyFieldName, primaryKeyValue) + is Int -> query.equalTo(primaryKeyFieldName, primaryKeyValue) + is Short -> query.equalTo(primaryKeyFieldName, primaryKeyValue) + is Byte -> query.equalTo(primaryKeyFieldName, primaryKeyValue) + else -> ERROR_TEXT + } + } + } + + } + return query.findFirst() + } +} \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt new file mode 100644 index 0000000..cab3680 --- /dev/null +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt @@ -0,0 +1,17 @@ +package com.github.saran2020.realmbrowser.data.model + +import com.github.saran2020.realmbrowser.RESULT_TYPE_EMPTY + +/** + * Created by Saran Sankaran on 1/15/18. + */ +class QueryResult() { + + var resultType: Byte = RESULT_TYPE_EMPTY + var result: Any? = null + + constructor(resultType: Byte, result: Any?) : this() { + this.resultType = resultType + this.result = result + } +} \ No newline at end of file From 0bb61ea4b2f7270409d29e9c1d1bd9924c934e87 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 4 Feb 2018 18:55:41 +0530 Subject: [PATCH 10/25] Update: Changed the flow of the app. Made the fields work with Realm List(RealmObject). --- .../saran2020/realmbrowser/ActivityHelper.kt | 3 +- .../saran2020/realmbrowser/Constants.kt | 3 +- .../saran2020/realmbrowser/ResultActivity.kt | 27 +-- .../data/FieldsTaskCompleteCallback.kt | 8 +- .../saran2020/realmbrowser/data/GetFields.kt | 173 +++++++++++------- .../realmbrowser/data/RealmQueryCreater.kt | 72 +------- .../realmbrowser/data/model/DisplayResult.kt | 6 + .../realmbrowser/data/model/ObjectInfo.kt | 3 +- .../realmbrowser/data/model/ObjectType.kt | 5 +- 9 files changed, 141 insertions(+), 159 deletions(-) create mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt index 6f8c2b0..b9b5493 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -24,7 +24,8 @@ fun startResultActivity(context: Context, data: ObjectType) { intent.putExtra(EXTRA_CLASS_NAME, objectInfo.parentClassName) intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_NAME, objectInfo.parentPrimaryKeyFieldName) intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyType) - intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME, objectInfo.fieldGetterName) + intent.putExtra(EXTRA_KEY_FIELD_GETTER_NAME, objectInfo.fieldGetterName) + intent.putExtra(EXTRA_KEY_FIELD_NAME, objectInfo.fieldGetterName) // check type and insert value when (objectInfo.parentPrimaryKeyType) { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt index a7aaf6d..e44ed09 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt @@ -12,10 +12,11 @@ const val NO_ITEM_SELECTED: Byte = -1 const val EXTRA_CLASS_NAME = "EXTRA_CLASS_NAME" const val EXTRA_FIND = "EXTRA_FIND" -const val EXTRA_PARENT_CLASS_NAME = "EXTRA_PARENT_CLASS_NAME" const val EXTRA_PARENT_PRIMARY_KEY_NAME = "EXTRA_PARENT_PRIMARY_KEY_NAME" const val EXTRA_PARENT_PRIMARY_KEY_TYPE = "EXTRA_PARENT_PRIMARY_KEY_TYPE" const val EXTRA_PARENT_PRIMARY_KEY_VALUE = "EXTRA_PARENT_PRIMARY_KEY_VALUE" +const val EXTRA_KEY_FIELD_GETTER_NAME = "EXTRA_KEY_FIELD_GETTER_NAME" +const val EXTRA_KEY_FIELD_NAME = "EXTRA_KEY_FIELD_NAME" const val EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME = "EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME" // Query Types diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt index 52302bd..ace01de 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt @@ -11,6 +11,7 @@ import android.widget.ProgressBar import com.github.saran2020.realmbrowser.data.FieldsTaskCompleteCallback import com.github.saran2020.realmbrowser.data.GetFields import com.github.saran2020.realmbrowser.data.model.ClassItem +import com.github.saran2020.realmbrowser.data.model.DisplayResult /** * Created by Saran Sankaran on 11/10/17. @@ -57,22 +58,24 @@ class ResultActivity : AppCompatActivity() { } } - private val callback: FieldsTaskCompleteCallback = object : FieldsTaskCompleteCallback() { + private val callback: FieldsTaskCompleteCallback = object : FieldsTaskCompleteCallback { - override fun onFetchComplete(fields: List?) { - super.onFetchComplete(fields) - if (fields == null || fields.isEmpty()) { - return - } - - linearResultHeader.removeAllViews() - populateHeader(this@ResultActivity, linearResultHeader, fields[0]) + override fun onFetchComplete(result: DisplayResult) { - recyclerResults.layoutManager = - LinearLayoutManager(this@ResultActivity, LinearLayoutManager.VERTICAL, false) - recyclerResults.adapter = RecyclerAdapter(this@ResultActivity, fields) showLoader(false) + + if (result.type == RESULT_TYPE_OBJECT.toInt() || result.type == RESULT_TYPE_REALM_RESULT.toInt()) { + + linearResultHeader.removeAllViews() + val fields = result.result as List + + populateHeader(this@ResultActivity, linearResultHeader, fields[0]) + + recyclerResults.layoutManager = + LinearLayoutManager(this@ResultActivity, LinearLayoutManager.VERTICAL, false) + recyclerResults.adapter = RecyclerAdapter(this@ResultActivity, fields) + } } } } \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt index 5d692d3..953cd73 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt @@ -1,12 +1,10 @@ package com.github.saran2020.realmbrowser.data -import com.github.saran2020.realmbrowser.data.model.ClassItem +import com.github.saran2020.realmbrowser.data.model.DisplayResult /** * Created by Saran Sankaran on 1/11/18. */ -abstract class FieldsTaskCompleteCallback { - - open fun onFetchComplete(fields: List?) { - } +interface FieldsTaskCompleteCallback { + fun onFetchComplete(fields: DisplayResult) {} } \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index c02f6a3..17c2709 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -3,16 +3,11 @@ package com.github.saran2020.realmbrowser.data import android.os.AsyncTask import android.os.Bundle import android.util.Log +import com.github.saran2020.realmbrowser.* import com.github.saran2020.realmbrowser.Exception.GetterMethodNotFoundException import com.github.saran2020.realmbrowser.Exception.PrimaryKeyItemNotFoundException import com.github.saran2020.realmbrowser.Exception.SchemaNotFoundException -import com.github.saran2020.realmbrowser.RESULT_TYPE_LIST -import com.github.saran2020.realmbrowser.RESULT_TYPE_OBJECT -import com.github.saran2020.realmbrowser.RESULT_TYPE_REALM_RESULT -import com.github.saran2020.realmbrowser.TAG -import com.github.saran2020.realmbrowser.data.model.ClassItem -import com.github.saran2020.realmbrowser.data.model.FieldItem -import com.github.saran2020.realmbrowser.data.model.ObjectType +import com.github.saran2020.realmbrowser.data.model.* import io.realm.* import java.lang.reflect.Method @@ -34,81 +29,128 @@ class GetFields { FetchFieldsTask(bundle, this.callback).execute() } - class FetchFieldsTask(private val bundle: Bundle, private val callback: FieldsTaskCompleteCallback?) : AsyncTask>() { + class FetchFieldsTask(private val bundle: Bundle, private val callback: FieldsTaskCompleteCallback?) : AsyncTask() { lateinit var realm: Realm - override fun doInBackground(vararg params: Void?): List { + override fun doInBackground(vararg params: Void?): DisplayResult { realm = Realm.getDefaultInstance() - val queryResult = RealmQueryCreater(realm, bundle).getResult() - - if (queryResult.result == null) { - return emptyList() + val realmQuery = RealmQueryCreater(realm, bundle).getQuery() + val queryResult = when (bundle.getByte(EXTRA_FIND)) { + FIND_FIRST -> findFirst(realmQuery) + FIND_ALL -> QueryResult(RESULT_TYPE_REALM_RESULT, realmQuery.findAll()) + else -> return DisplayResult(NO_DATA_TYPE.toInt(), null) } - return when (queryResult.resultType) { - RESULT_TYPE_OBJECT -> { - val fieldItems = findFieldsFromInstance(queryResult.result as RealmObject) - arrayListOf(fieldItems) + val result = + when (queryResult.resultType) { + RESULT_TYPE_OBJECT -> { + val classItem = findFields(queryResult.result as RealmObject) + DisplayResult(RESULT_TYPE_OBJECT.toInt(), arrayListOf(classItem)) + } + RESULT_TYPE_REALM_RESULT -> { + findFields(queryResult.result as RealmResults) + } + RESULT_TYPE_LIST -> { + findFields(queryResult.result as RealmList<*>, + bundle.getString(EXTRA_CLASS_NAME), + bundle.getString(EXTRA_KEY_FIELD_NAME)) + } + else -> DisplayResult(RESULT_TYPE_EMPTY.toInt(), null) + } + + return result + } + + private fun findFirst(query: RealmQuery<*>): QueryResult { + + + if (bundle.containsKey(EXTRA_PARENT_PRIMARY_KEY_VALUE)) { + + val primaryKeyFieldType = bundle.getInt(EXTRA_PARENT_PRIMARY_KEY_TYPE) + val primaryKeyFieldName = bundle.getString(EXTRA_PARENT_PRIMARY_KEY_NAME) + val primaryKeyValue = bundle.get(EXTRA_PARENT_PRIMARY_KEY_VALUE) + + when (primaryKeyFieldType) { + RealmFieldType.BOOLEAN.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Boolean) + RealmFieldType.FLOAT.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Float) + RealmFieldType.DOUBLE.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Double) + + RealmFieldType.STRING.nativeValue -> { + query.equalTo(primaryKeyFieldName, primaryKeyValue as String) + } + + RealmFieldType.INTEGER.nativeValue -> { + when (primaryKeyValue) { + is Long -> query.equalTo(primaryKeyFieldName, primaryKeyValue) + is Int -> query.equalTo(primaryKeyFieldName, primaryKeyValue) + is Short -> query.equalTo(primaryKeyFieldName, primaryKeyValue) + is Byte -> query.equalTo(primaryKeyFieldName, primaryKeyValue) + else -> ERROR_TEXT + } + } } - RESULT_TYPE_REALM_RESULT -> { - findFieldsFromRealmResult(queryResult.result as RealmResults) + } + + val result = QueryResult(RESULT_TYPE_OBJECT, query.findFirst()) + + if (bundle.containsKey(EXTRA_KEY_FIELD_GETTER_NAME) && result.result != null) { + + // TODO: handle + if (result.result == null) { + return result } - RESULT_TYPE_LIST -> { - findFieldsFromRealmList(queryResult.result as RealmList) + + val getterMethodName = bundle.getString(EXTRA_KEY_FIELD_GETTER_NAME) + val getterMethod = result.result!!::class.java.getMethod(getterMethodName) + result.result = getterMethod.invoke(result.result) + + if (getterMethod.returnType.isAssignableFrom(RealmList::class.java)) { + result.resultType = RESULT_TYPE_LIST + } else if (getterMethod.returnType.superclass == RealmObject::class.java) { + result.resultType = RESULT_TYPE_OBJECT } - else -> emptyList() + } -// val query = getRealmQuery() -// -// return when (bundle.getByte(EXTRA_FIND)) { -// FIND_FIRST -> { -// val fieldItems = findFirst(query) -// arrayListOf(fieldItems) -// } -// FIND_ALL -> findAll(query) -// else -> emptyList() -// } + return result } - private fun findFieldsFromRealmList(realmResults: RealmList): List { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + private fun findFields(realmInstance: RealmObject): ClassItem { + val getters = findGetters(realmInstance) + return findFieldsUsingGetter(realmInstance, getters) } - // //TODO: Handle class cast exception of casting to Class -// private fun getRealmQuery(): RealmQuery<*> { -// -// val selectedClass = bundle.getString(EXTRA_CLASS_NAME) -// val selectedClassInstance = realm.configuration.realmObjectClasses.single { -// it.simpleName.equals(selectedClass, true) -// } -// -// val query = realm.where(selectedClassInstance) -// -// return query -// } -// -// -// private fun findFirst(query: RealmQuery<*>): ClassItem { -// -// val resultValue = query.findFirst() as RealmObject -// return findFieldsFromInstance(resultValue) -// } -// -// - private fun findFieldsFromRealmResult(realmResult: RealmResults): ArrayList { + private fun findFields(realmResult: RealmResults): DisplayResult { val getterMethods = findGetters(realmResult[0] as RealmObject) val result = arrayListOf() realmResult.forEach { - result.add(findFieldsFromInstance(it as RealmObject, getterMethods)) + result.add(findFieldsUsingGetter(it as RealmObject, getterMethods)) } - return result + return DisplayResult(RESULT_TYPE_REALM_RESULT.toInt(), result) + } + + private fun findFields(realmList: RealmList<*>, className: String, fieldName: String): DisplayResult { + + val fieldType = realm.schema.get(className)?.getFieldType(fieldName) + val type = fieldType?.nativeValue ?: RESULT_TYPE_EMPTY.toInt() + + val result: Any = + if (type == RealmFieldType.LIST.nativeValue) { + val classItems = arrayListOf() + realmList.forEach { + classItems.add(findFields(it as RealmObject)) + } + } else { + realmList.toList() + } + + return DisplayResult(type, result) } /** @@ -125,12 +167,9 @@ class GetFields { val fieldNames = classSchema.fieldNames for (fieldName in fieldNames) { - val getterMethod = findGetter(classSchema, resultClass, fieldName) - - if (getterMethod == null) { - throw GetterMethodNotFoundException("Getter method not found for field $fieldName. " + - "Getter method should start with get or is followed by field name with uppercase first char of field name") - } + val getterMethod = findGetter(classSchema, resultClass, fieldName) ?: + throw GetterMethodNotFoundException("Getter method not found for field $fieldName. " + + "Getter method should start with get or is followed by field name with uppercase first char of field name") map.put(fieldName, getterMethod) @@ -164,8 +203,7 @@ class GetFields { return resultClass.getMethod(getterMethodName) } - private fun findFieldsFromInstance(resultInstance: RealmObject, - fieldGetters: Map = findGetters(resultInstance)) + private fun findFieldsUsingGetter(resultInstance: RealmObject, fieldGetters: Map) : ClassItem { val schema = getClassSchema(resultInstance) @@ -217,6 +255,7 @@ class GetFields { parentPrimaryKeyFieldName, parentPrimaryKeyFieldType.nativeValue, parentPrimaryKeyFieldValue, + getter.key, getter.value.name) } } @@ -224,7 +263,7 @@ class GetFields { return FieldItem(getter.key, fieldType, data) } - override fun onPostExecute(result: List?) { + override fun onPostExecute(result: DisplayResult) { super.onPostExecute(result) if (callback == null) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt index 3576995..9ff0de4 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt @@ -10,42 +10,12 @@ import io.realm.* */ class RealmQueryCreater(private val realm: Realm, private val bundle: Bundle) { - fun getResult(): QueryResult { + fun getQuery(): RealmQuery { val query = getBaseQuery() - - val result = QueryResult() - val queryResult = when (bundle.getByte(EXTRA_FIND)) { - FIND_FIRST -> { - result.resultType = RESULT_TYPE_OBJECT - findFirst(query) - } - FIND_ALL -> { - result.resultType = RESULT_TYPE_REALM_RESULT - query.findAll() - } - else -> null - } - - if (bundle.containsKey(EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME) && queryResult != null) { - - val getterMethodName = bundle.getString(EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME) - val getterMethod = queryResult::class.java.getMethod(getterMethodName) - result.result = getterMethod.invoke(queryResult) - - if (getterMethod.returnType.isAssignableFrom(RealmList::class.java)) { - result.resultType = RESULT_TYPE_LIST - } else if (getterMethod.returnType.superclass == RealmObject::class.java) { - result.resultType = RESULT_TYPE_OBJECT - } - - } else { - result.result = queryResult - } - - return result + return query } - private fun getBaseQuery(): RealmQuery<*> { + private fun getBaseQuery(): RealmQuery { val selectedClass = bundle.getString(EXTRA_CLASS_NAME) val selectedClassInstance = realm.configuration.realmObjectClasses.single { @@ -53,40 +23,6 @@ class RealmQueryCreater(private val realm: Realm, private val bundle: Bundle) { } val query = realm.where(selectedClassInstance) - - return query - } - - - private fun findFirst(query: RealmQuery<*>): Any? { - - if (bundle.containsKey(EXTRA_PARENT_PRIMARY_KEY_VALUE)) { - - val primaryKeyFieldType = bundle.getInt(EXTRA_PARENT_PRIMARY_KEY_TYPE) - val primaryKeyFieldName = bundle.getString(EXTRA_PARENT_PRIMARY_KEY_NAME) - val primaryKeyValue = bundle.get(EXTRA_PARENT_PRIMARY_KEY_VALUE) - - when (primaryKeyFieldType) { - RealmFieldType.BOOLEAN.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Boolean) - RealmFieldType.FLOAT.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Float) - RealmFieldType.DOUBLE.nativeValue -> query.equalTo(primaryKeyFieldName, primaryKeyValue as Double) - - RealmFieldType.STRING.nativeValue -> { - query.equalTo(primaryKeyFieldName, primaryKeyValue as String) - } - - RealmFieldType.INTEGER.nativeValue -> { - when (primaryKeyValue) { - is Long -> query.equalTo(primaryKeyFieldName, primaryKeyValue) - is Int -> query.equalTo(primaryKeyFieldName, primaryKeyValue) - is Short -> query.equalTo(primaryKeyFieldName, primaryKeyValue) - is Byte -> query.equalTo(primaryKeyFieldName, primaryKeyValue) - else -> ERROR_TEXT - } - } - } - - } - return query.findFirst() + return query as RealmQuery } } \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt new file mode 100644 index 0000000..5d1ca90 --- /dev/null +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt @@ -0,0 +1,6 @@ +package com.github.saran2020.realmbrowser.data.model + +/** + * Created by glynk-saran on 01-02-2018. + */ +class DisplayResult(val type: Int, val result: Any?) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt index d8ff31c..7a8a828 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt @@ -1,7 +1,5 @@ package com.github.saran2020.realmbrowser.data.model -import io.realm.RealmFieldType - /** * Created by Saran Sankaran on 1/15/18. */ @@ -9,4 +7,5 @@ data class ObjectInfo(val parentClassName: String, val parentPrimaryKeyFieldName: String, val parentPrimaryKeyType: Int, val parentPrimaryKeyValue: Any?, + val fieldName: String, val fieldGetterName: String) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt index 43d76f4..fa1761d 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt @@ -1,7 +1,5 @@ package com.github.saran2020.realmbrowser.data.model -import io.realm.RealmFieldType - /** * Whenever any model contains a field type of Object(Instance of RealmObject or RealmModel) instead * of storing the exact value, we store this value instead. This will help us in handling the click on @@ -26,7 +24,8 @@ data class ObjectType private constructor(val displayText: String) { parentPrimaryKeyFieldName: String, parentPrimaryKeyType: Int, parentPrimaryKeyValue: Any?, + fieldName: String, fieldGetterName: String) : this(displayText) { - objectInfo = ObjectInfo(parentClassName, parentPrimaryKeyFieldName, parentPrimaryKeyType, parentPrimaryKeyValue, fieldGetterName) + objectInfo = ObjectInfo(parentClassName, parentPrimaryKeyFieldName, parentPrimaryKeyType, parentPrimaryKeyValue, fieldName, fieldGetterName) } } \ No newline at end of file From bb71e62077c4a83bc777f5eacb140077903557ec Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Mon, 5 Feb 2018 00:49:45 +0530 Subject: [PATCH 11/25] Update: Made the fieldItem store type as int instead of FieldItem --- .../saran2020/realmbrowser/ViewHelper.kt | 22 +++++++++---------- .../saran2020/realmbrowser/data/GetFields.kt | 10 ++++----- .../realmbrowser/data/model/FieldItem.kt | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt index b5f0cc0..26f1274 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt @@ -218,32 +218,32 @@ private fun setTextToView(context: Context, textView: TextView, field: FieldItem } else { fieldData = when (field.type) { - RealmFieldType.BOOLEAN -> (field.value as Boolean).toString() - RealmFieldType.FLOAT -> (field.value as Float).toString() - RealmFieldType.DOUBLE -> (field.value as Double).toString() + RealmFieldType.BOOLEAN.nativeValue -> (field.value as Boolean).toString() + RealmFieldType.FLOAT.nativeValue -> (field.value as Float).toString() + RealmFieldType.DOUBLE.nativeValue -> (field.value as Double).toString() - RealmFieldType.STRING -> { + RealmFieldType.STRING.nativeValue -> { if ((field.value as String).isEmpty()) "\"\"" else field.value as String } - RealmFieldType.INTEGER -> { + RealmFieldType.INTEGER.nativeValue -> { when (field.value) { - is Long -> (field.value as Long).toString() - is Int -> (field.value as Int).toString() - is Short -> (field.value as Short).toString() - is Byte -> (field.value as Byte).toString() + is Long -> field.value.toString() + is Int -> field.value.toString() + is Short -> field.value.toString() + is Byte -> field.value.toString() else -> ERROR_TEXT } } - RealmFieldType.OBJECT -> { + RealmFieldType.OBJECT.nativeValue -> { isTextHyperlinkStyleable = true (field.value as ObjectType).displayText } - RealmFieldType.LIST -> { + RealmFieldType.LIST.nativeValue -> { isTextHyperlinkStyleable = true field.value as String } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index 17c2709..1494d4c 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -203,8 +203,8 @@ class GetFields { return resultClass.getMethod(getterMethodName) } - private fun findFieldsUsingGetter(resultInstance: RealmObject, fieldGetters: Map) - : ClassItem { + private fun findFieldsUsingGetter(resultInstance: RealmObject, + fieldGetters: Map): ClassItem { val schema = getClassSchema(resultInstance) val primaryKeyFieldName = schema.primaryKey @@ -236,14 +236,14 @@ class GetFields { getter: Map.Entry): FieldItem { val fieldName = getter.key - val fieldType = schema.getFieldType(fieldName) + val fieldType = schema.getFieldType(fieldName).nativeValue var data = getter.value.invoke(resultInstance) - Log.d("Tag", "field name = $fieldName fieldtype name = ${fieldType.name} nativeValue = ${fieldType.nativeValue}") + Log.d("Tag", "field name = $fieldName fieldtype = ${fieldType}") if (data != null) { - if (fieldType == RealmFieldType.OBJECT) { + if (fieldType == RealmFieldType.OBJECT.nativeValue) { val parentPrimaryKeyFieldName = schema.primaryKey val parentPrimaryKeyFieldType = schema.getFieldType(parentPrimaryKeyFieldName) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt index 93b3df8..9fbaae3 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt @@ -7,4 +7,4 @@ import io.realm.RealmFieldType * * A result item will contain the type and value of the field. */ -data class FieldItem(val name: String, val type: RealmFieldType, val value: Any?) \ No newline at end of file +data class FieldItem(val name: String, val type: Int, val value: Any?) \ No newline at end of file From c201857ad1b4bc43a645a184e210853b0b61273c Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 11 Feb 2018 14:49:16 +0530 Subject: [PATCH 12/25] Update: upgraded the kotlin plugin version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index cb26f07..63960ec 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { ext { - kotlin_version = '1.2.10' + kotlin_version = '1.2.21' support_library = '26.1.0' flow_layout_manager = '1.2.3.2' } From 89294d3e605f24e0b84e9064f1b4e9a6fa695a87 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Wed, 14 Feb 2018 01:29:28 +0530 Subject: [PATCH 13/25] Update: Display value for List of primitive types as well --- .../saran2020/realmbrowser/ActivityHelper.kt | 3 +- .../saran2020/realmbrowser/Constants.kt | 1 + .../realmbrowser/RecyclerNativeAdapter.kt | 49 +++++++++++ .../saran2020/realmbrowser/ResultActivity.kt | 35 ++++++-- .../saran2020/realmbrowser/ViewHelper.kt | 83 ++++++++++++------- .../saran2020/realmbrowser/data/GetFields.kt | 63 +++++++++----- .../realmbrowser/data/model/NativeListType.kt | 13 +++ .../realmbrowser/data/model/ObjectInfo.kt | 3 +- .../realmbrowser/data/model/ObjectType.kt | 5 +- 9 files changed, 192 insertions(+), 63 deletions(-) create mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt create mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt index b9b5493..dc0f0ba 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -25,7 +25,8 @@ fun startResultActivity(context: Context, data: ObjectType) { intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_NAME, objectInfo.parentPrimaryKeyFieldName) intent.putExtra(EXTRA_PARENT_PRIMARY_KEY_TYPE, objectInfo.parentPrimaryKeyType) intent.putExtra(EXTRA_KEY_FIELD_GETTER_NAME, objectInfo.fieldGetterName) - intent.putExtra(EXTRA_KEY_FIELD_NAME, objectInfo.fieldGetterName) + intent.putExtra(EXTRA_KEY_FIELD_NAME, objectInfo.fieldName) + intent.putExtra(EXTRA_KEY_FIELD_TYPE, objectInfo.fieldType) // check type and insert value when (objectInfo.parentPrimaryKeyType) { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt index e44ed09..7b4efc6 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt @@ -17,6 +17,7 @@ const val EXTRA_PARENT_PRIMARY_KEY_TYPE = "EXTRA_PARENT_PRIMARY_KEY_TYPE" const val EXTRA_PARENT_PRIMARY_KEY_VALUE = "EXTRA_PARENT_PRIMARY_KEY_VALUE" const val EXTRA_KEY_FIELD_GETTER_NAME = "EXTRA_KEY_FIELD_GETTER_NAME" const val EXTRA_KEY_FIELD_NAME = "EXTRA_KEY_FIELD_NAME" +const val EXTRA_KEY_FIELD_TYPE = "EXTRA_KEY_FIELD_TYPE" const val EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME = "EXTRA_PARENT_PRIMARY_KEY_GETTER_NAME" // Query Types diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt new file mode 100644 index 0000000..1407eaa --- /dev/null +++ b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt @@ -0,0 +1,49 @@ +package com.github.saran2020.realmbrowser + +import android.content.Context +import android.os.Build +import android.support.annotation.ColorInt +import android.support.v7.widget.RecyclerView +import android.view.ViewGroup +import android.widget.LinearLayout + +/** + * Created by its me on 08-Jan-18. + */ +class RecyclerNativeAdapter(private val context: Context, private val items: List, + private val itemType: Int) : RecyclerView.Adapter() { + + val TAG = RecyclerNativeAdapter::class.java.canonicalName + + private val size = 1 + @ColorInt private val oddColor: Int + @ColorInt private val evenColor: Int + + init { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + oddColor = context.getColor(R.color.tableBackroundOdd) + evenColor = context.getColor(R.color.tableBackroundEven) + } else { + oddColor = context.resources.getColor(R.color.tableBackroundOdd) + evenColor = context.resources.getColor(R.color.tableBackroundEven) + } + } + + override fun getItemCount() = items.size + + override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { + return ViewHolder(getLinearLayout(context, size)) + } + + override fun onBindViewHolder(holder: ViewHolder?, position: Int) { + populateViews(context, holder?.item, items[position], itemType, position) + + if (position % 2 == 0) { + holder?.item?.setBackgroundColor(evenColor) + } else { + holder?.item?.setBackgroundColor(oddColor) + } + } + + class ViewHolder(val item: LinearLayout) : RecyclerView.ViewHolder(item) +} \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt index ace01de..a3e33ae 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt @@ -12,6 +12,9 @@ import com.github.saran2020.realmbrowser.data.FieldsTaskCompleteCallback import com.github.saran2020.realmbrowser.data.GetFields import com.github.saran2020.realmbrowser.data.model.ClassItem import com.github.saran2020.realmbrowser.data.model.DisplayResult +import com.github.saran2020.realmbrowser.data.model.NativeListType +import io.realm.RealmFieldType +import io.realm.internal.Property /** * Created by Saran Sankaran on 11/10/17. @@ -65,16 +68,36 @@ class ResultActivity : AppCompatActivity() { showLoader(false) - if (result.type == RESULT_TYPE_OBJECT.toInt() || result.type == RESULT_TYPE_REALM_RESULT.toInt()) { + if (result.type == RESULT_TYPE_EMPTY.toInt()) { + // TODO: Handle + } else { linearResultHeader.removeAllViews() - val fields = result.result as List - populateHeader(this@ResultActivity, linearResultHeader, fields[0]) + // TODO: instead of using RESULT_TYPE_OBJECT declared in library, use the one provided in RealmFieldType + if (result.type == RESULT_TYPE_OBJECT.toInt() + || result.type == RESULT_TYPE_REALM_RESULT.toInt() + || result.type == RealmFieldType.LIST.nativeValue) { - recyclerResults.layoutManager = - LinearLayoutManager(this@ResultActivity, LinearLayoutManager.VERTICAL, false) - recyclerResults.adapter = RecyclerAdapter(this@ResultActivity, fields) + // result will be list of class item + val fields = result.result as List + + populateHeader(this@ResultActivity, linearResultHeader, fields[0]) + + recyclerResults.layoutManager = + LinearLayoutManager(this@ResultActivity, LinearLayoutManager.VERTICAL, false) + recyclerResults.adapter = RecyclerAdapter(this@ResultActivity, fields) + + } else { + + val fields = (result.result as NativeListType).fieldValue + + recyclerResults.layoutManager = + LinearLayoutManager(this@ResultActivity, LinearLayoutManager.VERTICAL, false) + + // Property.TYPE_ARRAY is the offset for list of primitive list eg if int = 1 list of int is Property.TYPE_ARRAY + VALUE_OF_INT + recyclerResults.adapter = RecyclerNativeAdapter(this@ResultActivity, fields, Property.TYPE_ARRAY - result.type) + } } } } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt index 26f1274..554c945 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt @@ -101,7 +101,7 @@ val TAG = "ViewHelper" //} private fun dpToPx(dp: Int): Int { - return (dp * Resources.getSystem().getDisplayMetrics().density).toInt() + return (dp * Resources.getSystem().displayMetrics.density).toInt() } private fun createGridLayout(context: Context): GridLayout { @@ -160,10 +160,9 @@ fun populateHeader(context: Context, layout: LinearLayout, item: ClassItem) { // primary key first layout.addView(getHeaderText(context, item.primaryKey, widthInPx, textPadding, true)) - for (index in 0 until fieldCount) { - val textHeader = getHeaderText(context, item.fieldsList[index], widthInPx, textPadding, false) - layout.addView(textHeader) - } + (0 until fieldCount) + .map { getHeaderText(context, item.fieldsList[it], widthInPx, textPadding, false) } + .forEach { layout.addView(it) } Log.d(TAG, "Completed") } @@ -184,6 +183,9 @@ private fun getHeaderText(context: Context, field: FieldItem, textWidth: Int, te return textHeader } +/** + * populate views of object type + */ fun populateViews(context: Context, layout: LinearLayout?, objectClickListener: View.OnClickListener, item: ClassItem, position: Int) { @@ -194,61 +196,82 @@ fun populateViews(context: Context, layout: LinearLayout?, val viewCount = layout.childCount // primary key item first - setTextToView(context, layout.getChildAt(0) as TextView, item.primaryKey, - objectClickListener, position, 0) + setTextToView(context, layout.getChildAt(0) as TextView, item.primaryKey.value, + item.primaryKey.type, objectClickListener, position, 0) // other fields for (index in 1 until viewCount) { // index - 1 because first item of view is primary key - setTextToView(context, layout.getChildAt(index) as TextView, item.fieldsList[index - 1], - objectClickListener, position, index) + val fieldItem = item.fieldsList[index - 1] + setTextToView(context, layout.getChildAt(index) as TextView, fieldItem.value, + fieldItem.type, objectClickListener, position, index) } } -private fun setTextToView(context: Context, textView: TextView, field: FieldItem, - objectClickListener: View.OnClickListener, - rowPos: Int, viewPos: Int) { +/** + * populate views of native type + */ +fun populateViews(context: Context, layout: LinearLayout?, + value: Any?, valueType: Int, position: Int) { + + if (layout == null) + return + + setTextToView(context, layout.getChildAt(0) as TextView, + value, valueType, null, position, 0) +} + +private fun setTextToView(context: Context, textView: TextView, value: Any?, valueType: Int, + objectClickListener: View.OnClickListener?, rowPos: Int, viewPos: Int) { val fieldData: String - var isTextHyperlinkStyleable: Boolean = false + var isTextHyperlinkStyleable = false - if (field.value == null) { + if (value == null) { fieldData = "null" setStyleToText(context, textView, R.style.nullTextAppearance) } else { - fieldData = when (field.type) { - RealmFieldType.BOOLEAN.nativeValue -> (field.value as Boolean).toString() - RealmFieldType.FLOAT.nativeValue -> (field.value as Float).toString() - RealmFieldType.DOUBLE.nativeValue -> (field.value as Double).toString() + // TODO: Check casting of native values might not be required because of RMI + fieldData = when (valueType) { + RealmFieldType.BOOLEAN.nativeValue -> (value as Boolean).toString() + RealmFieldType.FLOAT.nativeValue -> (value as Float).toString() + RealmFieldType.DOUBLE.nativeValue -> (value as Double).toString() RealmFieldType.STRING.nativeValue -> { - if ((field.value as String).isEmpty()) + if ((value as String).isEmpty()) "\"\"" else - field.value as String + value } RealmFieldType.INTEGER.nativeValue -> { - when (field.value) { - is Long -> field.value.toString() - is Int -> field.value.toString() - is Short -> field.value.toString() - is Byte -> field.value.toString() + when (value) { + is Long -> value.toString() + is Int -> value.toString() + is Short -> value.toString() + is Byte -> value.toString() else -> ERROR_TEXT } } RealmFieldType.OBJECT.nativeValue -> { isTextHyperlinkStyleable = true - (field.value as ObjectType).displayText + (value as ObjectType).displayText } RealmFieldType.LIST.nativeValue -> { isTextHyperlinkStyleable = true - field.value as String + (value as ObjectType).displayText } - else -> ERROR_TEXT + else -> { + if (valueType > RealmFieldType.LIST.nativeValue) { + isTextHyperlinkStyleable = true + (value as ObjectType).displayText + } else { + ERROR_TEXT + } + } } } @@ -270,10 +293,10 @@ private fun setStyleToText(context: Context, textView: TextView, @StyleRes resId } private fun makeTextViewHyperlink(textView: TextView, text: String, - objectClickListener: View.OnClickListener, tag: String) { + objectClickListener: View.OnClickListener?, tag: String) { val ssb = SpannableStringBuilder(text) - ssb.setSpan(URLSpan("#"), 0, ssb.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.setSpan(URLSpan("#"), 0, ssb.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) textView.setText(ssb, TextView.BufferType.SPANNABLE) textView.tag = tag diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index 1494d4c..1cdfb17 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -56,7 +56,8 @@ class GetFields { RESULT_TYPE_LIST -> { findFields(queryResult.result as RealmList<*>, bundle.getString(EXTRA_CLASS_NAME), - bundle.getString(EXTRA_KEY_FIELD_NAME)) + bundle.getString(EXTRA_KEY_FIELD_NAME), + bundle.getInt(EXTRA_KEY_FIELD_TYPE)) } else -> DisplayResult(RESULT_TYPE_EMPTY.toInt(), null) } @@ -107,22 +108,33 @@ class GetFields { val getterMethod = result.result!!::class.java.getMethod(getterMethodName) result.result = getterMethod.invoke(result.result) - if (getterMethod.returnType.isAssignableFrom(RealmList::class.java)) { - result.resultType = RESULT_TYPE_LIST - } else if (getterMethod.returnType.superclass == RealmObject::class.java) { - result.resultType = RESULT_TYPE_OBJECT - } + val fieldType = bundle.getInt(EXTRA_KEY_FIELD_TYPE) + result.resultType = + when { + fieldType > RealmFieldType.LIST.nativeValue -> // List of RealmObjects + RESULT_TYPE_LIST + fieldType == RealmFieldType.OBJECT.nativeValue -> // Is an RealmObject + RESULT_TYPE_OBJECT + else -> RESULT_TYPE_EMPTY + } } return result } + /** + * find fields from RealmObject + */ private fun findFields(realmInstance: RealmObject): ClassItem { val getters = findGetters(realmInstance) return findFieldsUsingGetter(realmInstance, getters) } + + /** + * find fields from Realmresult + */ private fun findFields(realmResult: RealmResults): DisplayResult { val getterMethods = findGetters(realmResult[0] as RealmObject) @@ -135,22 +147,26 @@ class GetFields { return DisplayResult(RESULT_TYPE_REALM_RESULT.toInt(), result) } - private fun findFields(realmList: RealmList<*>, className: String, fieldName: String): DisplayResult { - val fieldType = realm.schema.get(className)?.getFieldType(fieldName) - val type = fieldType?.nativeValue ?: RESULT_TYPE_EMPTY.toInt() + /** + * find fields from RealmList + */ + private fun findFields(realmList: RealmList<*>, className: String, fieldName: String, fieldType: Int): DisplayResult { - val result: Any = - if (type == RealmFieldType.LIST.nativeValue) { - val classItems = arrayListOf() - realmList.forEach { - classItems.add(findFields(it as RealmObject)) - } - } else { - realmList.toList() - } + return if (fieldType == RealmFieldType.LIST.nativeValue) { + + val classItems = arrayListOf() + realmList.forEach { + classItems.add(findFields(it as RealmObject)) + } + + DisplayResult(fieldType, classItems) + } else { + + val result = NativeListType(fieldName, realmList.toList()) + DisplayResult(fieldType, result) + } - return DisplayResult(type, result) } /** @@ -167,8 +183,8 @@ class GetFields { val fieldNames = classSchema.fieldNames for (fieldName in fieldNames) { - val getterMethod = findGetter(classSchema, resultClass, fieldName) ?: - throw GetterMethodNotFoundException("Getter method not found for field $fieldName. " + + val getterMethod = findGetter(classSchema, resultClass, fieldName) + ?: throw GetterMethodNotFoundException("Getter method not found for field $fieldName. " + "Getter method should start with get or is followed by field name with uppercase first char of field name") map.put(fieldName, getterMethod) @@ -243,7 +259,7 @@ class GetFields { if (data != null) { - if (fieldType == RealmFieldType.OBJECT.nativeValue) { + if (fieldType == RealmFieldType.OBJECT.nativeValue || fieldType >= RealmFieldType.LIST.nativeValue) { val parentPrimaryKeyFieldName = schema.primaryKey val parentPrimaryKeyFieldType = schema.getFieldType(parentPrimaryKeyFieldName) @@ -256,7 +272,8 @@ class GetFields { parentPrimaryKeyFieldType.nativeValue, parentPrimaryKeyFieldValue, getter.key, - getter.value.name) + getter.value.name, + fieldType) } } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt new file mode 100644 index 0000000..5aed223 --- /dev/null +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt @@ -0,0 +1,13 @@ +package com.github.saran2020.realmbrowser.data.model + +import io.realm.RealmList + +/** + * Whenever any model contains a field type of RealmListList(only RealmList of native values, + * not of RealmObject) instead of storing the exact value, we store this value instead. This + * will help us in handling the click on this item in table view + * + * ctor + * Created by its me on 14-Feb-18. + */ +data class NativeListType (val fieldName: String, val fieldValue: List<*>) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt index 7a8a828..70da818 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt @@ -8,4 +8,5 @@ data class ObjectInfo(val parentClassName: String, val parentPrimaryKeyType: Int, val parentPrimaryKeyValue: Any?, val fieldName: String, - val fieldGetterName: String) \ No newline at end of file + val fieldGetterName: String, + val fieldType: Int) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt index fa1761d..7ace664 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt @@ -25,7 +25,8 @@ data class ObjectType private constructor(val displayText: String) { parentPrimaryKeyType: Int, parentPrimaryKeyValue: Any?, fieldName: String, - fieldGetterName: String) : this(displayText) { - objectInfo = ObjectInfo(parentClassName, parentPrimaryKeyFieldName, parentPrimaryKeyType, parentPrimaryKeyValue, fieldName, fieldGetterName) + fieldGetterName: String, + fieldType: Int) : this(displayText) { + objectInfo = ObjectInfo(parentClassName, parentPrimaryKeyFieldName, parentPrimaryKeyType, parentPrimaryKeyValue, fieldName, fieldGetterName, fieldType) } } \ No newline at end of file From 24a09bf0f9c7be55a2d390d9aba49ea7984edbe6 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 18 Feb 2018 00:43:39 +0530 Subject: [PATCH 14/25] Update: Now app shows the RealmList with type. --- .../saran2020/realmbrowser/data/GetFields.kt | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index 1cdfb17..0fb7007 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -11,6 +11,7 @@ import com.github.saran2020.realmbrowser.data.model.* import io.realm.* import java.lang.reflect.Method + /** * Created by its me on 29-Dec-17. */ @@ -265,8 +266,26 @@ class GetFields { val parentPrimaryKeyFieldType = schema.getFieldType(parentPrimaryKeyFieldName) val parentPrimaryKeyFieldValue = findGetter(schema, resultInstance::class.java, parentPrimaryKeyFieldName)?.invoke(resultInstance) + val displayText = + if (fieldType == RealmFieldType.OBJECT.nativeValue) { + + data.javaClass.simpleName.removeSuffix("RealmProxy") + } else { + + val javaClass = data.javaClass + val className = javaClass.simpleName.removeSuffix("RealmProxy") + val superName = (data as RealmList<*>).firstOrNull()?.javaClass?.simpleName + + if (superName == null) { + className + } else { + "$className<$superName>" + } + } + + data = ObjectType( - data.javaClass.simpleName.removeSuffix("RealmProxy"), + displayText, schema.className, parentPrimaryKeyFieldName, parentPrimaryKeyFieldType.nativeValue, From ed908ce0913c5c9438e15eecc6b6ddb844e0bf10 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 18 Feb 2018 01:10:17 +0530 Subject: [PATCH 15/25] Update: Corrected the name in java docs. --- .../java/com/github/saran2020/realmbrowser/ActivityHelper.kt | 2 +- .../main/java/com/github/saran2020/realmbrowser/FindAdapter.kt | 2 +- .../main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt | 2 +- .../java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt | 2 +- .../com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt | 2 +- .../main/java/com/github/saran2020/realmbrowser/ViewHelper.kt | 2 +- .../java/com/github/saran2020/realmbrowser/data/GetFields.kt | 2 +- .../com/github/saran2020/realmbrowser/data/model/FieldItem.kt | 2 +- .../github/saran2020/realmbrowser/data/model/NativeListType.kt | 2 +- .../com/github/saran2020/realmbrowser/data/model/ObjectType.kt | 2 +- .../com/github/saran2020/realmbrowser/data/model/QueryItem.kt | 2 +- .../main/java/com/github/saran2020/realmbrowser2/model/Extra.kt | 2 +- .../java/com/github/saran2020/realmbrowser2/model/Person.kt | 2 +- .../java/com/github/saran2020/realmbrowser2/model/Senator.java | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt index dc0f0ba..100c515 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt @@ -7,7 +7,7 @@ import io.realm.RealmFieldType /** * Helper class to store activity related stuff - * Created by its me on 14-Jan-18. + * Created by Saran on 14-Jan-18. */ fun startResultActivity(context: Context, className: String, find: Byte) { val intent = Intent(context, ResultActivity::class.java) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt index fe1780e..d51f436 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt @@ -7,7 +7,7 @@ import android.view.ViewGroup import android.widget.TextView /** - * Created by its me on 11-Nov-17. + * Created by Saran on 11-Nov-17. */ class FindAdapter(private var itemList: List) : RecyclerView.Adapter() { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt index 60b24c7..eef80c8 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt @@ -9,7 +9,7 @@ import android.widget.TextView import com.github.saran2020.realmbrowser.data.model.QueryItem /** - * Created by its me on 11-Nov-17. + * Created by Saran on 11-Nov-17. */ class QueryAdapter : RecyclerView.Adapter() { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt index 471e2ad..1f4e326 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt @@ -12,7 +12,7 @@ import com.github.saran2020.realmbrowser.data.model.ClassItem import com.github.saran2020.realmbrowser.data.model.ObjectType /** - * Created by its me on 08-Jan-18. + * Created by Saran on 08-Jan-18. */ class RecyclerAdapter(private val context: Context, private val items: List) : RecyclerView.Adapter() { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt index 1407eaa..53b0a95 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt @@ -8,7 +8,7 @@ import android.view.ViewGroup import android.widget.LinearLayout /** - * Created by its me on 08-Jan-18. + * Created by Saran on 08-Jan-18. */ class RecyclerNativeAdapter(private val context: Context, private val items: List, private val itemType: Int) : RecyclerView.Adapter() { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt index 554c945..3725654 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt @@ -22,7 +22,7 @@ import io.realm.RealmFieldType /** * A helper class to get the gridview with populated field items - * Created by its me on 02-Jan-18. + * Created by Saran on 02-Jan-18. */ val TAG = "ViewHelper" diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index 0fb7007..dca0b4c 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -13,7 +13,7 @@ import java.lang.reflect.Method /** - * Created by its me on 29-Dec-17. + * Created by Saran on 29-Dec-17. */ class GetFields { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt index 9fbaae3..e7ba644 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt @@ -3,7 +3,7 @@ package com.github.saran2020.realmbrowser.data.model import io.realm.RealmFieldType /** - * Created by its me on 29-Dec-17. + * Created by Saran on 29-Dec-17. * * A result item will contain the type and value of the field. */ diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt index 5aed223..99d9994 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt @@ -8,6 +8,6 @@ import io.realm.RealmList * will help us in handling the click on this item in table view * * ctor - * Created by its me on 14-Feb-18. + * Created by Saran on 14-Feb-18. */ data class NativeListType (val fieldName: String, val fieldValue: List<*>) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt index 7ace664..fd10a19 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt @@ -13,7 +13,7 @@ package com.github.saran2020.realmbrowser.data.model * @param parentPrimaryKeyValue Value of primary key of parent, this will be used to display the * data when this item is clicked in table view * - * Created by its me on 13-Jan-18. + * Created by Saran on 13-Jan-18. */ data class ObjectType private constructor(val displayText: String) { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt index a4c14de..681012b 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt @@ -3,7 +3,7 @@ package com.github.saran2020.realmbrowser.data.model import java.util.* /** - * Created by its me on 02-Jan-18. + * Created by Saran on 02-Jan-18. */ data class QueryItem(var type: Byte, var queryList: LinkedList, diff --git a/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Extra.kt b/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Extra.kt index 980d612..82b3f97 100644 --- a/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Extra.kt +++ b/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Extra.kt @@ -4,7 +4,7 @@ import io.realm.RealmObject import io.realm.annotations.PrimaryKey /** - * Created by its me on 24-Dec-17. + * Created by Saran on 24-Dec-17. */ open class Extra() : RealmObject() { diff --git a/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Person.kt b/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Person.kt index 139f8c9..42739eb 100644 --- a/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Person.kt +++ b/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Person.kt @@ -4,7 +4,7 @@ import io.realm.RealmObject import io.realm.annotations.PrimaryKey /** - * Created by its me on 24-Dec-17. + * Created by Saran on 24-Dec-17. */ open class Person() : RealmObject() { diff --git a/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Senator.java b/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Senator.java index f0bb505..6df2320 100644 --- a/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Senator.java +++ b/sample/src/main/java/com/github/saran2020/realmbrowser2/model/Senator.java @@ -5,7 +5,7 @@ import io.realm.annotations.PrimaryKey; /** - * Created by its me on 24-Dec-17. + * Created by Saran on 24-Dec-17. */ public class Senator extends RealmObject { From 9718e04e45b06e5ccf4220ea142908a9afdb0e38 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 18 Feb 2018 01:13:40 +0530 Subject: [PATCH 16/25] Updated: Updated color values --- library/src/main/res/values/colors.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/library/src/main/res/values/colors.xml b/library/src/main/res/values/colors.xml index 2b739a0..d741429 100644 --- a/library/src/main/res/values/colors.xml +++ b/library/src/main/res/values/colors.xml @@ -1,15 +1,15 @@ - #3F51B5 - #303F9F - #FFFFFF - #4CAF50 + #0079BF + #055A8C + #F8F9F9 + #519839 #3F51B5 - #9FA8DA - #E8EAF6 - #FFFFFF - #FF6D00 + #E4F0F6 + #8BBDD9 + @color/buttonTextColor + #CD5A91 \ No newline at end of file From d32e59b93bb819da247d5e479cb481a644b25386 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 18 Feb 2018 01:24:09 +0530 Subject: [PATCH 17/25] Removed: Removed some unnecessary code --- .../saran2020/realmbrowser/ViewHelper.kt | 84 ------------------- 1 file changed, 84 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt index 3725654..6a5f5f6 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt @@ -27,94 +27,10 @@ import io.realm.RealmFieldType val TAG = "ViewHelper" -//fun getGridLayoutForFieldItem(context: Context, fields: List): GridLayout { -// val gridLayout = createGridLayout(context) -// val nameColSpec = GridLayout.spec(0, 2) -// val valueColSpec = GridLayout.spec(2, 3, 1F) -// -// var rowIndex = 0 -// for (field in fields) { -// -// var fieldData: String -// -// if (field.value == null) { -// fieldData = "null" -// } else { -// -// fieldData = when (field.type) { -// TYPE_BOOLEAN -> (field.value as Boolean).toString() -// TYPE_BYTE -> (field.value as Byte).toString() -// TYPE_CHAR -> (field.value as Char).toString() -// TYPE_SHORT -> (field.value as Short).toString() -// TYPE_INT -> (field.value as Int).toString() -// TYPE_LONG -> (field.value as Long).toString() -// TYPE_FLOAT -> (field.value as Float).toString() -// TYPE_DOUBLE -> (field.value as Double).toString() -// TYPE_STRING -> { -// if ((field.value as String).isEmpty()) -// "\"\"" -// else -// field.value -// } -// else -> "Some error occurred" -// } -// } -// -// val rowSpec = GridLayout.spec(rowIndex) -// -// // print field name -// val textViewFieldName = TextView(context, null, R.style.LabelStyle) -// textViewFieldName.setBackgroundResource(R.drawable.field_item_background) -// textViewFieldName.text = String.format("%s:", field.fieldName) -// -// val layoutParms = GridLayout.LayoutParams(rowSpec, nameColSpec) -// layoutParms.setGravity(Gravity.FILL) -// gridLayout.addView(textViewFieldName, layoutParms) -// -// val fieldValue: View -// -// // TODO: Print realm list -// // if type is realm object, only print the field name and then recursively -// // call the function again to print data inside -// if (field.type == TYPE_REALM_OBJECT) { -// -// @Suppress("UNCHECKED_CAST") -// fieldValue = getGridLayoutForFieldItem(context, field.value as List) -// } else { -// -// // print field value -// val textViewFieldValue = TextView(context, null, R.style.ValueStyle) -// textViewFieldValue.text = fieldData -// -// fieldValue = textViewFieldValue -// } -// -// val valueLayoutParms = GridLayout.LayoutParams(rowSpec, valueColSpec) -// valueLayoutParms.setGravity(Gravity.FILL) -// fieldValue.setBackgroundResource(R.drawable.field_item_background) -// gridLayout.addView(fieldValue, valueLayoutParms) -// -// rowIndex++ -// } -// -// return gridLayout -//} - private fun dpToPx(dp: Int): Int { return (dp * Resources.getSystem().displayMetrics.density).toInt() } -private fun createGridLayout(context: Context): GridLayout { - - val gridLayout = GridLayout(context) - gridLayout.layoutParams = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) - gridLayout.columnCount = 5 - gridLayout.isColumnOrderPreserved = true - - return gridLayout -} - fun getLinearLayout(context: Context, size: Int): LinearLayout { val layout = getLinearLayout(context) val widthInPx = getTextViewWidth(context) From 48f1ccb9b70da89ed92f2c3bf9871acc3396bcd1 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 18 Feb 2018 01:36:27 +0530 Subject: [PATCH 18/25] Updated: Made the adapter for native to use full screen --- .../saran2020/realmbrowser/RecyclerAdapter.kt | 3 ++- .../realmbrowser/RecyclerNativeAdapter.kt | 10 +++++++--- .../saran2020/realmbrowser/ResultActivity.kt | 2 +- .../github/saran2020/realmbrowser/ViewHelper.kt | 14 ++++++-------- library/src/main/res/values/integers.xml | 5 +++++ 5 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 library/src/main/res/values/integers.xml diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt index 1f4e326..af2aec6 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt @@ -18,6 +18,7 @@ class RecyclerAdapter(private val context: Context, private val items: List, private val itemType: Int) : RecyclerView.Adapter() { + private val ITEM_PER_SCREEN_VERTICAL: Int = context.resources.getInteger(R.integer.ITEMS_PER_SCREEN_NATIVE) val TAG = RecyclerNativeAdapter::class.java.canonicalName private val size = 1 - @ColorInt private val oddColor: Int - @ColorInt private val evenColor: Int + + @ColorInt + private val oddColor: Int + @ColorInt + private val evenColor: Int init { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { @@ -32,7 +36,7 @@ class RecyclerNativeAdapter(private val context: Context, private val items: Lis override fun getItemCount() = items.size override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { - return ViewHolder(getLinearLayout(context, size)) + return ViewHolder(getLinearLayout(context, size, ITEM_PER_SCREEN_VERTICAL)) } override fun onBindViewHolder(holder: ViewHolder?, position: Int) { diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt index a3e33ae..7a9e763 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt @@ -82,7 +82,7 @@ class ResultActivity : AppCompatActivity() { // result will be list of class item val fields = result.result as List - populateHeader(this@ResultActivity, linearResultHeader, fields[0]) + populateHeader(this@ResultActivity, linearResultHeader, fields[0], resources.getInteger(R.integer.ITEMS_PER_SCREEN_OBJECT)) recyclerResults.layoutManager = LinearLayoutManager(this@ResultActivity, LinearLayoutManager.VERTICAL, false) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt index 6a5f5f6..73db76c 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt @@ -11,8 +11,6 @@ import android.text.style.URLSpan import android.util.Log import android.view.View import android.view.ViewGroup -import android.widget.FrameLayout -import android.widget.GridLayout import android.widget.LinearLayout import android.widget.TextView import com.github.saran2020.realmbrowser.data.model.ClassItem @@ -31,9 +29,9 @@ private fun dpToPx(dp: Int): Int { return (dp * Resources.getSystem().displayMetrics.density).toInt() } -fun getLinearLayout(context: Context, size: Int): LinearLayout { +fun getLinearLayout(context: Context, size: Int, verticalViewsInScreen: Int): LinearLayout { val layout = getLinearLayout(context) - val widthInPx = getTextViewWidth(context) + val widthInPx = getTextViewWidth(context, verticalViewsInScreen) val textPadding = dpToPx(8) for (index in 0 until size) { @@ -67,10 +65,10 @@ private fun getTextView(context: Context, widthPx: Int, padding: Int): TextView return textView } -fun populateHeader(context: Context, layout: LinearLayout, item: ClassItem) { +fun populateHeader(context: Context, layout: LinearLayout, item: ClassItem, verticalViewsInScreen: Int) { val fieldCount = item.fieldsList.size - val widthInPx = getTextViewWidth(context) + val widthInPx = getTextViewWidth(context, verticalViewsInScreen) val textPadding = dpToPx(8) // primary key first @@ -219,7 +217,7 @@ private fun makeTextViewHyperlink(textView: TextView, text: String, textView.setOnClickListener(objectClickListener) } -private fun getTextViewWidth(context: Context): Int { +private fun getTextViewWidth(context: Context, verticalViewsInScreen: Int): Int { val metrics = context.resources.displayMetrics - return metrics.widthPixels / 3 + return metrics.widthPixels / verticalViewsInScreen } \ No newline at end of file diff --git a/library/src/main/res/values/integers.xml b/library/src/main/res/values/integers.xml new file mode 100644 index 0000000..2eb3c59 --- /dev/null +++ b/library/src/main/res/values/integers.xml @@ -0,0 +1,5 @@ + + + 1 + 3 + \ No newline at end of file From da52f7ea96470cab39a4f1f4015d04e01b5ab0ec Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 18 Feb 2018 16:17:33 +0530 Subject: [PATCH 19/25] Updated: Populate headers for single item list --- .../saran2020/realmbrowser/ResultActivity.kt | 6 ++++-- .../saran2020/realmbrowser/ViewHelper.kt | 20 +++++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt index 7a9e763..5621041 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt @@ -90,13 +90,15 @@ class ResultActivity : AppCompatActivity() { } else { - val fields = (result.result as NativeListType).fieldValue + val fields = result.result as NativeListType recyclerResults.layoutManager = LinearLayoutManager(this@ResultActivity, LinearLayoutManager.VERTICAL, false) + populateHeader(this@ResultActivity, linearResultHeader, fields.fieldName, resources.getInteger(R.integer.ITEMS_PER_SCREEN_NATIVE)) + // Property.TYPE_ARRAY is the offset for list of primitive list eg if int = 1 list of int is Property.TYPE_ARRAY + VALUE_OF_INT - recyclerResults.adapter = RecyclerNativeAdapter(this@ResultActivity, fields, Property.TYPE_ARRAY - result.type) + recyclerResults.adapter = RecyclerNativeAdapter(this@ResultActivity, fields.fieldValue, Property.TYPE_ARRAY - result.type) } } } diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt index 73db76c..991bea0 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt @@ -14,7 +14,6 @@ import android.view.ViewGroup import android.widget.LinearLayout import android.widget.TextView import com.github.saran2020.realmbrowser.data.model.ClassItem -import com.github.saran2020.realmbrowser.data.model.FieldItem import com.github.saran2020.realmbrowser.data.model.ObjectType import io.realm.RealmFieldType @@ -72,16 +71,25 @@ fun populateHeader(context: Context, layout: LinearLayout, item: ClassItem, vert val textPadding = dpToPx(8) // primary key first - layout.addView(getHeaderText(context, item.primaryKey, widthInPx, textPadding, true)) + layout.addView(getHeaderTextView(context, item.primaryKey.name, widthInPx, textPadding, true)) (0 until fieldCount) - .map { getHeaderText(context, item.fieldsList[it], widthInPx, textPadding, false) } + .map { getHeaderTextView(context, item.fieldsList[it].name, widthInPx, textPadding, false) } .forEach { layout.addView(it) } Log.d(TAG, "Completed") } -private fun getHeaderText(context: Context, field: FieldItem, textWidth: Int, textPadding: Int, isPrimaryKey: Boolean): TextView { +fun populateHeader(context: Context, layout: LinearLayout, item: String, verticalViewsInScreen: Int) { + + val widthInPx = getTextViewWidth(context, verticalViewsInScreen) + + // primary key first + layout.addView(getHeaderTextView(context, item, widthInPx, 0, false)) + Log.d(TAG, "Completed") +} + +private fun getHeaderTextView(context: Context, field: String, textWidth: Int, textPadding: Int, isPrimaryKey: Boolean): TextView { val textHeader = getTextView(context, textWidth, textPadding) setStyleToText(context, textHeader, R.style.headerTextAppearance) @@ -91,8 +99,8 @@ private fun getHeaderText(context: Context, field: FieldItem, textWidth: Int, te textHeader.compoundDrawablePadding = dpToPx(4) } - textHeader.text = field.name - Log.d(TAG, "data = ${field.name}") + textHeader.text = field + Log.d(TAG, "data = ${field}") return textHeader } From c42a3b06556feb6ab779fbfe0fefed03e3c83b47 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 18 Feb 2018 18:35:10 +0530 Subject: [PATCH 20/25] Added: added a dialog for class picker --- .../saran2020/realmbrowser/MainActivity.kt | 27 ++++++++++++--- .../main/res/layout/activity_main_library.xml | 34 ++++++++----------- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt b/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt index 15c1e47..66c40b4 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt @@ -1,6 +1,8 @@ package com.github.saran2020.realmbrowser +import android.content.DialogInterface import android.os.Bundle +import android.support.v7.app.AlertDialog import android.support.v7.app.AppCompatActivity import android.support.v7.widget.RecyclerView import android.view.View @@ -17,14 +19,12 @@ class MainActivity : AppCompatActivity() { private val TAG = MainActivity::class.java.simpleName // global var - lateinit var appPackageName: String lateinit var realm: Realm private lateinit var recyclerQueryAdapter: QueryAdapter private lateinit var recyclerFindAdapter: FindAdapter //views private lateinit var editClassName: EditText - private lateinit var textPackageName: TextView private lateinit var imageAddQuery: ImageView private lateinit var recyclerQueryContent: RecyclerView private lateinit var recyclerFindContent: RecyclerView @@ -38,11 +38,8 @@ class MainActivity : AppCompatActivity() { realm = Realm.getDefaultInstance() - appPackageName = applicationContext.packageName - // views editClassName = findViewById(R.id.editClassName_library) - textPackageName = findViewById(R.id.packageName_library) imageAddQuery = findViewById(R.id.queryAdd_library) recyclerQueryContent = findViewById(R.id.queryRecycler_library) recyclerFindContent = findViewById(R.id.findRecycler_library) @@ -61,6 +58,10 @@ class MainActivity : AppCompatActivity() { recyclerFindAdapter = FindAdapter(getFindItems()) recyclerFindContent.layoutManager = FlowLayoutManager() recyclerFindContent.adapter = recyclerFindAdapter + + editClassName.setOnClickListener { + showModelPicker() + } } override fun onDestroy() { @@ -78,6 +79,22 @@ class MainActivity : AppCompatActivity() { FIND_FIRST_STRING) } + private fun showModelPicker() { + + val classes = realm.configuration.realmObjectClasses + .map { it.simpleName as CharSequence } + .toTypedArray() + + + val listener = DialogInterface.OnClickListener { _, which -> + editClassName.setText(classes[which]) + } + + AlertDialog.Builder(this) + .setTitle("Pick a Model") + .setItems(classes, listener).show() + } + private val onAddQueryClickListener = View.OnClickListener { Toast.makeText(this@MainActivity, "Add Clicked", Toast.LENGTH_SHORT).show() } diff --git a/library/src/main/res/layout/activity_main_library.xml b/library/src/main/res/layout/activity_main_library.xml index b0a4b87..876d501 100644 --- a/library/src/main/res/layout/activity_main_library.xml +++ b/library/src/main/res/layout/activity_main_library.xml @@ -22,32 +22,28 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" - android:hint="@string/class_name"/> - - + android:focusable="false" + android:hint="@string/class_name" + android:longClickable="false" + android:maxLines="1" /> + android:background="@color/colorPrimary" /> + android:text="Query" /> + android:tint="@color/positiveColor" /> + android:layout_below="@id/queryAdd_library" /> + android:text="Find" /> + android:layout_below="@id/findTitle_library" /> + tools:text="Realm.where(MyRealmTestObject).findAll()" /> @@ -108,5 +104,5 @@ android:paddingRight="16dp" android:text="@string/fetch" android:textColor="@color/buttonTextColor" - android:textSize="14sp"/> + android:textSize="14sp" /> \ No newline at end of file From 5cb29134fc7a18b7892e25d9653a4ec023d335b9 Mon Sep 17 00:00:00 2001 From: Saran Sankaran Date: Sun, 18 Feb 2018 20:50:28 +0530 Subject: [PATCH 21/25] Added: Add visual feedback for "find" selected item --- .../saran2020/realmbrowser/FindAdapter.kt | 42 ++++++++++++++----- .../saran2020/realmbrowser/MainActivity.kt | 5 +-- .../src/main/res/layout/chip_find_item.xml | 2 +- library/src/main/res/values/colors.xml | 2 +- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt b/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt index d51f436..3d7d21b 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt +++ b/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt @@ -1,5 +1,7 @@ package com.github.saran2020.realmbrowser +import android.content.Context +import android.support.v4.content.res.ResourcesCompat import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View @@ -9,24 +11,26 @@ import android.widget.TextView /** * Created by Saran on 11-Nov-17. */ -class FindAdapter(private var itemList: List) : RecyclerView.Adapter() { +class FindAdapter(private var context: Context, private var itemList: List) : RecyclerView.Adapter() { + + private val inflator = LayoutInflater.from(context) var selectedItem = NO_ITEM_SELECTED override fun getItemCount() = itemList.size override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { - var view = LayoutInflater.from(parent?.context).inflate(R.layout.chip_find_item, parent, false) - return ViewHolder(view) + val view = inflator.inflate(R.layout.chip_find_item, parent, false) + return ViewHolder(view as TextView) } override fun onBindViewHolder(holder: ViewHolder?, position: Int) { - holder?.textItemFind?.text = itemList[position] + holder?.textView?.text = itemList[position] } - private fun setSelectedItem(position: Int) { + private fun setSelectedItem(textView: TextView, position: Int) { - var selectedPosition: Byte = when (position) { + val selectedPosition: Byte = when (position) { 0 -> FIND_ALL 1 -> FIND_FIRST else -> NO_ITEM_SELECTED @@ -37,19 +41,35 @@ class FindAdapter(private var itemList: List) : RecyclerView.Adapter editClassName.setText(classes[which]) } @@ -96,7 +95,7 @@ class MainActivity : AppCompatActivity() { } private val onAddQueryClickListener = View.OnClickListener { - Toast.makeText(this@MainActivity, "Add Clicked", Toast.LENGTH_SHORT).show() + Toast.makeText(this@MainActivity, "Coming soon", Toast.LENGTH_SHORT).show() } private var onFetchClickListener = View.OnClickListener { diff --git a/library/src/main/res/layout/chip_find_item.xml b/library/src/main/res/layout/chip_find_item.xml index 52dc6f2..c9a7f42 100644 --- a/library/src/main/res/layout/chip_find_item.xml +++ b/library/src/main/res/layout/chip_find_item.xml @@ -10,6 +10,6 @@ android:gravity="center" android:paddingEnd="12dp" android:paddingStart="12dp" - android:textColor="#212121" + android:textColor="@color/findTextColor" android:textSize="13sp" tools:text="Query()"/> \ No newline at end of file diff --git a/library/src/main/res/values/colors.xml b/library/src/main/res/values/colors.xml index d741429..2e00d21 100644 --- a/library/src/main/res/values/colors.xml +++ b/library/src/main/res/values/colors.xml @@ -10,6 +10,6 @@ #E4F0F6 #8BBDD9 @color/buttonTextColor - #CD5A91 + #CD5A91#212121 \ No newline at end of file From d4a4b14951a8917840a77aa76564b1cce67a162d Mon Sep 17 00:00:00 2001 From: saran Date: Wed, 15 Aug 2018 01:22:06 +0530 Subject: [PATCH 22/25] Changed the module name to better suite the distribution --- .../saran2020/realmbrowser/ExampleInstrumentedTest.java | 0 {library => RealmBrowser}/src/main/AndroidManifest.xml | 0 .../com/github/saran2020/realmbrowser/ActivityHelper.kt | 0 .../java/com/github/saran2020/realmbrowser/Constants.kt | 0 .../java/com/github/saran2020/realmbrowser/FindAdapter.kt | 0 .../java/com/github/saran2020/realmbrowser/MainActivity.kt | 0 .../java/com/github/saran2020/realmbrowser/QueryAdapter.kt | 0 .../com/github/saran2020/realmbrowser/RecyclerAdapter.kt | 0 .../github/saran2020/realmbrowser/RecyclerNativeAdapter.kt | 0 .../com/github/saran2020/realmbrowser/ResultActivity.kt | 0 .../java/com/github/saran2020/realmbrowser/ViewHelper.kt | 0 .../realmbrowser/data/FieldsTaskCompleteCallback.kt | 0 .../com/github/saran2020/realmbrowser/data/GetFields.kt | 6 +++--- .../github/saran2020/realmbrowser/data/RealmQueryCreater.kt | 0 .../github/saran2020/realmbrowser/data/model/ClassItem.kt | 0 .../saran2020/realmbrowser/data/model/DisplayResult.kt | 0 .../github/saran2020/realmbrowser/data/model/FieldItem.kt | 0 .../saran2020/realmbrowser/data/model/NativeListType.kt | 0 .../github/saran2020/realmbrowser/data/model/ObjectInfo.kt | 0 .../github/saran2020/realmbrowser/data/model/ObjectType.kt | 0 .../github/saran2020/realmbrowser/data/model/QueryItem.kt | 0 .../github/saran2020/realmbrowser/data/model/QueryResult.kt | 0 .../realmbrowser/exception/GetterMethodNotFoundException.kt | 6 ++++++ .../exception/PrimaryKeyItemNotFoundException.kt | 6 ++++++ .../realmbrowser/exception/SchemaNotFoundException.kt | 6 ++++++ .../src/main/res/drawable/background_chip.xml | 0 .../src/main/res/drawable/button_selector.xml | 0 .../src/main/res/drawable/field_item_background.xml | 0 .../src/main/res/drawable/ic_add_black_24dp.xml | 0 .../src/main/res/drawable/ic_cancel_black_24dp.xml | 0 .../src/main/res/drawable/ic_drafts_black_24dp.xml | 0 .../src/main/res/drawable/ic_primary_key_icon.xml | 0 .../src/main/res/layout/activity_main_library.xml | 0 .../src/main/res/layout/activity_result_library.xml | 0 .../src/main/res/layout/chip_find_item.xml | 0 .../src/main/res/layout/chip_query_item.xml | 0 {library => RealmBrowser}/src/main/res/values/colors.xml | 0 {library => RealmBrowser}/src/main/res/values/dimen.xml | 0 {library => RealmBrowser}/src/main/res/values/integers.xml | 0 {library => RealmBrowser}/src/main/res/values/strings.xml | 0 {library => RealmBrowser}/src/main/res/values/styles.xml | 0 .../com/github/saran2020/realmbrowser/ExampleUnitTest.java | 0 42 files changed, 21 insertions(+), 3 deletions(-) rename {library => RealmBrowser}/src/androidTest/java/com/github/saran2020/realmbrowser/ExampleInstrumentedTest.java (100%) rename {library => RealmBrowser}/src/main/AndroidManifest.xml (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/Constants.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt (98%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/model/ClassItem.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt (100%) rename {library => RealmBrowser}/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt (100%) create mode 100644 RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/GetterMethodNotFoundException.kt create mode 100644 RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/PrimaryKeyItemNotFoundException.kt create mode 100644 RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/SchemaNotFoundException.kt rename {library => RealmBrowser}/src/main/res/drawable/background_chip.xml (100%) rename {library => RealmBrowser}/src/main/res/drawable/button_selector.xml (100%) rename {library => RealmBrowser}/src/main/res/drawable/field_item_background.xml (100%) rename {library => RealmBrowser}/src/main/res/drawable/ic_add_black_24dp.xml (100%) rename {library => RealmBrowser}/src/main/res/drawable/ic_cancel_black_24dp.xml (100%) rename {library => RealmBrowser}/src/main/res/drawable/ic_drafts_black_24dp.xml (100%) rename {library => RealmBrowser}/src/main/res/drawable/ic_primary_key_icon.xml (100%) rename {library => RealmBrowser}/src/main/res/layout/activity_main_library.xml (100%) rename {library => RealmBrowser}/src/main/res/layout/activity_result_library.xml (100%) rename {library => RealmBrowser}/src/main/res/layout/chip_find_item.xml (100%) rename {library => RealmBrowser}/src/main/res/layout/chip_query_item.xml (100%) rename {library => RealmBrowser}/src/main/res/values/colors.xml (100%) rename {library => RealmBrowser}/src/main/res/values/dimen.xml (100%) rename {library => RealmBrowser}/src/main/res/values/integers.xml (100%) rename {library => RealmBrowser}/src/main/res/values/strings.xml (100%) rename {library => RealmBrowser}/src/main/res/values/styles.xml (100%) rename {library => RealmBrowser}/src/test/java/com/github/saran2020/realmbrowser/ExampleUnitTest.java (100%) diff --git a/library/src/androidTest/java/com/github/saran2020/realmbrowser/ExampleInstrumentedTest.java b/RealmBrowser/src/androidTest/java/com/github/saran2020/realmbrowser/ExampleInstrumentedTest.java similarity index 100% rename from library/src/androidTest/java/com/github/saran2020/realmbrowser/ExampleInstrumentedTest.java rename to RealmBrowser/src/androidTest/java/com/github/saran2020/realmbrowser/ExampleInstrumentedTest.java diff --git a/library/src/main/AndroidManifest.xml b/RealmBrowser/src/main/AndroidManifest.xml similarity index 100% rename from library/src/main/AndroidManifest.xml rename to RealmBrowser/src/main/AndroidManifest.xml diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/ActivityHelper.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/Constants.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/Constants.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/Constants.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/FindAdapter.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/MainActivity.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/QueryAdapter.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/RecyclerAdapter.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/RecyclerNativeAdapter.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/ResultActivity.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/ViewHelper.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/FieldsTaskCompleteCallback.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt similarity index 98% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt index dca0b4c..26a41e0 100644 --- a/library/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt +++ b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/GetFields.kt @@ -4,9 +4,9 @@ import android.os.AsyncTask import android.os.Bundle import android.util.Log import com.github.saran2020.realmbrowser.* -import com.github.saran2020.realmbrowser.Exception.GetterMethodNotFoundException -import com.github.saran2020.realmbrowser.Exception.PrimaryKeyItemNotFoundException -import com.github.saran2020.realmbrowser.Exception.SchemaNotFoundException +import com.github.saran2020.realmbrowser.exception.GetterMethodNotFoundException +import com.github.saran2020.realmbrowser.exception.PrimaryKeyItemNotFoundException +import com.github.saran2020.realmbrowser.exception.SchemaNotFoundException import com.github.saran2020.realmbrowser.data.model.* import io.realm.* import java.lang.reflect.Method diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/RealmQueryCreater.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ClassItem.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/ClassItem.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/model/ClassItem.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/ClassItem.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/DisplayResult.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/FieldItem.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/NativeListType.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectInfo.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/ObjectType.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryItem.kt diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt similarity index 100% rename from library/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt rename to RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/data/model/QueryResult.kt diff --git a/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/GetterMethodNotFoundException.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/GetterMethodNotFoundException.kt new file mode 100644 index 0000000..bb5093e --- /dev/null +++ b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/GetterMethodNotFoundException.kt @@ -0,0 +1,6 @@ +package com.github.saran2020.realmbrowser.exception + +/** + * Created by Saran Sankaran on 1/13/18. + */ +class GetterMethodNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/PrimaryKeyItemNotFoundException.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/PrimaryKeyItemNotFoundException.kt new file mode 100644 index 0000000..04d310e --- /dev/null +++ b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/PrimaryKeyItemNotFoundException.kt @@ -0,0 +1,6 @@ +package com.github.saran2020.realmbrowser.exception + +/** + * Created by Saran Sankaran on 1/13/18. + */ +class PrimaryKeyItemNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/SchemaNotFoundException.kt b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/SchemaNotFoundException.kt new file mode 100644 index 0000000..2ee1172 --- /dev/null +++ b/RealmBrowser/src/main/java/com/github/saran2020/realmbrowser/exception/SchemaNotFoundException.kt @@ -0,0 +1,6 @@ +package com.github.saran2020.realmbrowser.exception + +/** + * Created by Saran Sankaran on 1/14/18. + */ +class SchemaNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/library/src/main/res/drawable/background_chip.xml b/RealmBrowser/src/main/res/drawable/background_chip.xml similarity index 100% rename from library/src/main/res/drawable/background_chip.xml rename to RealmBrowser/src/main/res/drawable/background_chip.xml diff --git a/library/src/main/res/drawable/button_selector.xml b/RealmBrowser/src/main/res/drawable/button_selector.xml similarity index 100% rename from library/src/main/res/drawable/button_selector.xml rename to RealmBrowser/src/main/res/drawable/button_selector.xml diff --git a/library/src/main/res/drawable/field_item_background.xml b/RealmBrowser/src/main/res/drawable/field_item_background.xml similarity index 100% rename from library/src/main/res/drawable/field_item_background.xml rename to RealmBrowser/src/main/res/drawable/field_item_background.xml diff --git a/library/src/main/res/drawable/ic_add_black_24dp.xml b/RealmBrowser/src/main/res/drawable/ic_add_black_24dp.xml similarity index 100% rename from library/src/main/res/drawable/ic_add_black_24dp.xml rename to RealmBrowser/src/main/res/drawable/ic_add_black_24dp.xml diff --git a/library/src/main/res/drawable/ic_cancel_black_24dp.xml b/RealmBrowser/src/main/res/drawable/ic_cancel_black_24dp.xml similarity index 100% rename from library/src/main/res/drawable/ic_cancel_black_24dp.xml rename to RealmBrowser/src/main/res/drawable/ic_cancel_black_24dp.xml diff --git a/library/src/main/res/drawable/ic_drafts_black_24dp.xml b/RealmBrowser/src/main/res/drawable/ic_drafts_black_24dp.xml similarity index 100% rename from library/src/main/res/drawable/ic_drafts_black_24dp.xml rename to RealmBrowser/src/main/res/drawable/ic_drafts_black_24dp.xml diff --git a/library/src/main/res/drawable/ic_primary_key_icon.xml b/RealmBrowser/src/main/res/drawable/ic_primary_key_icon.xml similarity index 100% rename from library/src/main/res/drawable/ic_primary_key_icon.xml rename to RealmBrowser/src/main/res/drawable/ic_primary_key_icon.xml diff --git a/library/src/main/res/layout/activity_main_library.xml b/RealmBrowser/src/main/res/layout/activity_main_library.xml similarity index 100% rename from library/src/main/res/layout/activity_main_library.xml rename to RealmBrowser/src/main/res/layout/activity_main_library.xml diff --git a/library/src/main/res/layout/activity_result_library.xml b/RealmBrowser/src/main/res/layout/activity_result_library.xml similarity index 100% rename from library/src/main/res/layout/activity_result_library.xml rename to RealmBrowser/src/main/res/layout/activity_result_library.xml diff --git a/library/src/main/res/layout/chip_find_item.xml b/RealmBrowser/src/main/res/layout/chip_find_item.xml similarity index 100% rename from library/src/main/res/layout/chip_find_item.xml rename to RealmBrowser/src/main/res/layout/chip_find_item.xml diff --git a/library/src/main/res/layout/chip_query_item.xml b/RealmBrowser/src/main/res/layout/chip_query_item.xml similarity index 100% rename from library/src/main/res/layout/chip_query_item.xml rename to RealmBrowser/src/main/res/layout/chip_query_item.xml diff --git a/library/src/main/res/values/colors.xml b/RealmBrowser/src/main/res/values/colors.xml similarity index 100% rename from library/src/main/res/values/colors.xml rename to RealmBrowser/src/main/res/values/colors.xml diff --git a/library/src/main/res/values/dimen.xml b/RealmBrowser/src/main/res/values/dimen.xml similarity index 100% rename from library/src/main/res/values/dimen.xml rename to RealmBrowser/src/main/res/values/dimen.xml diff --git a/library/src/main/res/values/integers.xml b/RealmBrowser/src/main/res/values/integers.xml similarity index 100% rename from library/src/main/res/values/integers.xml rename to RealmBrowser/src/main/res/values/integers.xml diff --git a/library/src/main/res/values/strings.xml b/RealmBrowser/src/main/res/values/strings.xml similarity index 100% rename from library/src/main/res/values/strings.xml rename to RealmBrowser/src/main/res/values/strings.xml diff --git a/library/src/main/res/values/styles.xml b/RealmBrowser/src/main/res/values/styles.xml similarity index 100% rename from library/src/main/res/values/styles.xml rename to RealmBrowser/src/main/res/values/styles.xml diff --git a/library/src/test/java/com/github/saran2020/realmbrowser/ExampleUnitTest.java b/RealmBrowser/src/test/java/com/github/saran2020/realmbrowser/ExampleUnitTest.java similarity index 100% rename from library/src/test/java/com/github/saran2020/realmbrowser/ExampleUnitTest.java rename to RealmBrowser/src/test/java/com/github/saran2020/realmbrowser/ExampleUnitTest.java From b13713de7dbd31df4dc848f3d0b61adf4fcb0074 Mon Sep 17 00:00:00 2001 From: saran Date: Wed, 15 Aug 2018 01:22:52 +0530 Subject: [PATCH 23/25] Removed some old files --- library/.gitignore | 1 - library/build.gradle | 44 ------------------- library/proguard-rules.pro | 21 --------- .../GetterMethodNotFoundException.kt | 6 --- .../PrimaryKeyItemNotFoundException.kt | 6 --- .../Exception/SchemaNotFoundException.kt | 6 --- sample/build.gradle | 8 ++-- 7 files changed, 3 insertions(+), 89 deletions(-) delete mode 100644 library/.gitignore delete mode 100644 library/build.gradle delete mode 100644 library/proguard-rules.pro delete mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/Exception/GetterMethodNotFoundException.kt delete mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/Exception/PrimaryKeyItemNotFoundException.kt delete mode 100644 library/src/main/java/com/github/saran2020/realmbrowser/Exception/SchemaNotFoundException.kt diff --git a/library/.gitignore b/library/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/library/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/library/build.gradle b/library/build.gradle deleted file mode 100644 index eaf8af9..0000000 --- a/library/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply plugin: 'realm-android' - -android { - compileSdkVersion 26 - buildToolsVersion "27.0.3" - - defaultConfig { - minSdkVersion 21 - targetSdkVersion 26 - 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:$support_library" - implementation "com.android.support:recyclerview-v7:$support_library" - implementation "com.xiaofeng.android:flowlayoutmanager:$flow_layout_manager" - - // Test dependencies - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.1' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' - compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" -} - -repositories { - mavenCentral() -} diff --git a/library/proguard-rules.pro b/library/proguard-rules.pro deleted file mode 100644 index f1b4245..0000000 --- a/library/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# 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/library/src/main/java/com/github/saran2020/realmbrowser/Exception/GetterMethodNotFoundException.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/GetterMethodNotFoundException.kt deleted file mode 100644 index 691df7f..0000000 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/GetterMethodNotFoundException.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.github.saran2020.realmbrowser.Exception - -/** - * Created by Saran Sankaran on 1/13/18. - */ -class GetterMethodNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/PrimaryKeyItemNotFoundException.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/PrimaryKeyItemNotFoundException.kt deleted file mode 100644 index 3b0d9de..0000000 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/PrimaryKeyItemNotFoundException.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.github.saran2020.realmbrowser.Exception - -/** - * Created by Saran Sankaran on 1/13/18. - */ -class PrimaryKeyItemNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/SchemaNotFoundException.kt b/library/src/main/java/com/github/saran2020/realmbrowser/Exception/SchemaNotFoundException.kt deleted file mode 100644 index a528bf9..0000000 --- a/library/src/main/java/com/github/saran2020/realmbrowser/Exception/SchemaNotFoundException.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.github.saran2020.realmbrowser.Exception - -/** - * Created by Saran Sankaran on 1/14/18. - */ -class SchemaNotFoundException(msg: String) : Exception(msg) \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index 32509fa..eb71160 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,10 +1,9 @@ apply plugin: 'com.android.application' - apply plugin: 'kotlin-android' - apply plugin: 'kotlin-android-extensions' - apply plugin: 'realm-android' +apply plugin: 'kotlin-kapt' + android { compileSdkVersion 26 @@ -30,7 +29,6 @@ dependencies { // Other dependencies implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation "com.android.support:appcompat-v7:$support_library" implementation "com.android.support:recyclerview-v7:$support_library" @@ -40,5 +38,5 @@ dependencies { androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' // Library - implementation project(':library') + implementation project(':RealmBrowser') } From 7d9eba6c451ff6afe8ff11867addcd579be654b7 Mon Sep 17 00:00:00 2001 From: saran Date: Wed, 15 Aug 2018 01:25:34 +0530 Subject: [PATCH 24/25] 1. Library distribution setup 2. Some version upgrade --- README.md | 2 - RealmBrowser/.gitignore | 1 + RealmBrowser/build.gradle | 79 ++++++++++++++++++++++++ RealmBrowser/proguard-rules.pro | 21 +++++++ build.gradle | 10 +-- gradle/wrapper/gradle-wrapper.properties | 4 +- settings.gradle | 2 +- 7 files changed, 110 insertions(+), 9 deletions(-) create mode 100644 RealmBrowser/.gitignore create mode 100644 RealmBrowser/build.gradle create mode 100644 RealmBrowser/proguard-rules.pro diff --git a/README.md b/README.md index 73f9194..61d7546 100644 --- a/README.md +++ b/README.md @@ -1,3 +1 @@ ## RealmBrowser - -This library is still under development, however you can still try this library be cloning it. We would appricate if you can come back before the end of Feb 2018 by which it is expected to be completed. diff --git a/RealmBrowser/.gitignore b/RealmBrowser/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/RealmBrowser/.gitignore @@ -0,0 +1 @@ +/build diff --git a/RealmBrowser/build.gradle b/RealmBrowser/build.gradle new file mode 100644 index 0000000..14cde30 --- /dev/null +++ b/RealmBrowser/build.gradle @@ -0,0 +1,79 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'realm-android' +apply plugin: 'kotlin-kapt' + +ext { + bintrayRepo = 'RealmBrowser' + bintrayName = 'com.github.saran2020.realmbrowser' + + libraryName = 'RealmBrowser' + + publishedGroupId = 'com.github.saran2020.realmbrowser' + artifact = 'RealmBrowser' + libraryVersion = '0.1' + + libraryDescription = 'A database browser for Android to browse Realm database' + + siteUrl = 'https://github.com/saran2020/RealmBrowser' + gitUrl = 'https://github.com/saran2020/RealmBrowser.git' + + developerId = 'saran2020' + developerName = 'Saran Sankaran' + developerEmail = 'sands.developer@gmail.com' + + licenseName = 'The Apache Software License, Version 2.0' + licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + allLicenses = ["Apache-2.0"] +} + +android { + compileSdkVersion 26 + buildToolsVersion "27.0.3" + + defaultConfig { + minSdkVersion 21 + targetSdkVersion 26 + 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:$support_library" + implementation "com.android.support:recyclerview-v7:$support_library" + implementation "com.xiaofeng.android:flowlayoutmanager:$flow_layout_manager" + + // Test dependencies + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' +} + +repositories { + mavenCentral() +} + +//Add these lines to publish library to bintray. This is the readymade scripts made by github user nuuneoi to make uploading to bintray easy. +//Place it at the end of the file +if (project.rootProject.file('local.properties').exists()) { + apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle' + apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle' +} + +subprojects { + tasks.withType(Javadoc).all { enabled = false } +} \ No newline at end of file diff --git a/RealmBrowser/proguard-rules.pro b/RealmBrowser/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/RealmBrowser/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/build.gradle b/build.gradle index 63960ec..67aebad 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { ext { - kotlin_version = '1.2.21' +` kotlin_version = '1.2.60' support_library = '26.1.0' flow_layout_manager = '1.2.3.2' } @@ -14,9 +14,11 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "io.realm:realm-gradle-plugin:4.3.1" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3" + classpath "com.github.dcendents:android-maven-gradle-plugin:2.1" } } @@ -27,6 +29,6 @@ allprojects { } } -task clean(type: Delete) { - delete rootProject.buildDir +subprojects { + tasks.withType(Javadoc).all { enabled = false } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c6ae32e..c7a6cbf 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Nov 09 13:06:30 IST 2017 +#Sun Apr 08 18:04:08 IST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/settings.gradle b/settings.gradle index 52baf7e..403f94e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':sample', ':library' +include ':sample', ':RealmBrowser' From ec5d955de81f8adc515a0b6c9a1fc3e72d666cc0 Mon Sep 17 00:00:00 2001 From: saran Date: Wed, 15 Aug 2018 01:27:19 +0530 Subject: [PATCH 25/25] minor fix in the build file --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 67aebad..cc25798 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { ext { -` kotlin_version = '1.2.60' + kotlin_version = '1.2.60' support_library = '26.1.0' flow_layout_manager = '1.2.3.2' }